gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r26266 - in gnunet-gtk: contrib src/fs
Date: Sun, 3 Mar 2013 02:58:05 +0100

Author: LRN
Date: 2013-03-03 02:58:05 +0100 (Sun, 03 Mar 2013)
New Revision: 26266

Added:
   gnunet-gtk/contrib/gnunet_fs_gtk_namespace_organizer.glade
   gnunet-gtk/src/fs/gnunet-fs-gtk_advertise-pseudonym.h
   gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_manager.h
   gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_organizer.c
   gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_organizer.h
Modified:
   gnunet-gtk/contrib/Makefile.am
   gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade
   gnunet-gtk/contrib/gnunet_fs_gtk_publish_dialog.glade
   gnunet-gtk/src/fs/Makefile.am
   gnunet-gtk/src/fs/gnunet-fs-gtk.h
   gnunet-gtk/src/fs/gnunet-fs-gtk_advertise-pseudonym.c
   gnunet-gtk/src/fs/gnunet-fs-gtk_download-save-as.c
   gnunet-gtk/src/fs/gnunet-fs-gtk_main-window-search.c
   gnunet-gtk/src/fs/gnunet-fs-gtk_open-uri.c
   gnunet-gtk/src/fs/gnunet-fs-gtk_publish-dialog.c
Log:
Massive namespace UI update

New Namespace Organizer dialog (replaces the "Create namespace" dialog,
also allows namespace deletion and renaming). Allows user to select which
namespace to use for publications.

Main Window menu was changed appropriately.

Glade-3.8 removed use_action_appearance=False eveywhere.

Glade-3.8 removed all treeview selection objects.

Publication master dialog now uses selected default namespace (if any)
only.

Added frames to Pubdialog VPaned to make it more obvious, as per GTK docs.

Replaced pseudonym-selection treeview with an identifier-selection
treeview.
Reworked the look of identifiers graph. IDs in italics point at looping
points. IDs in bold are graph endpoints (recommended IDs). More precise
loop detection (more data is hashed).
Removed the hashmap-related fixme. Hash collisions will add some duplicate
nodes into the tree. Acceptable.

Fixed names of some auxiliary objects (size groups, images).

Removed adjustments (use the defaults).

Moved some code into GNUNET_FS_GTK_advertise_namespace() function, made it
shared.

Fixed a bug in main window namespace selector ("selected-row-reference"
does not exist anymore).

Fixed a bug in OpenURI dialog (correct anonymity widget name).

TODO: insert NS advertisements into KBlocks when both global and private
namespace publication is enabled.

Modified: gnunet-gtk/contrib/Makefile.am
===================================================================
--- gnunet-gtk/contrib/Makefile.am      2013-03-03 01:57:23 UTC (rev 26265)
+++ gnunet-gtk/contrib/Makefile.am      2013-03-03 01:58:05 UTC (rev 26266)
@@ -32,6 +32,7 @@
   gnunet_fs_gtk_download_as_dialog.glade \
   gnunet_fs_gtk_main_window.glade \
   gnunet_fs_gtk_namespace_manager.glade \
+  gnunet_fs_gtk_namespace_organizer.glade \
   gnunet_fs_gtk_edit_publication.glade \
   gnunet_fs_gtk_open_directory_dialog.glade \
   gnunet_fs_gtk_open_url_dialog.glade \

Modified: gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade  2013-03-03 01:57:23 UTC 
(rev 26265)
+++ gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade  2013-03-03 01:58:05 UTC 
(rev 26266)
@@ -144,6 +144,11 @@
     <property name="can_focus">False</property>
     <property name="stock">gtk-find</property>
   </object>
+  <object class="GtkImage" id="find_and_replace_stock_image">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-find-and-replace</property>
+  </object>
   <object class="GtkImage" id="index_stock_image">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -227,7 +232,6 @@
             <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="can_focus">False</property>
                 <property name="label" translatable="yes">_File 
sharing</property>
@@ -238,7 +242,6 @@
                     <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>
@@ -252,7 +255,6 @@
                     </child>
                     <child>
                       <object class="GtkMenuItem" 
id="GNUNET_GTK_main_menu_unindex">
-                        <property name="use_action_appearance">False</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
                         <property name="label" translatable="yes">_List 
indexed files</property>
@@ -269,7 +271,6 @@
                     <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>
@@ -284,7 +285,6 @@
                     <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>
@@ -303,44 +303,30 @@
                       </object>
                     </child>
                     <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>
+                      <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_file_manage_pseudonyms">
+                        <property name="label" translatable="yes">_Manage 
namespaces</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="accel_path">&lt;gnunet-fs-gtk&gt;/File 
sharing/Create pseudonym</property>
+                        <property name="tooltip_text" translatable="yes">Opens 
namespace manager dialog to adjust the list of namespaces you want to search 
in, as well as get detailed information about all discovered 
namespaces.</property>
                         <property name="use_underline">True</property>
-                        <property name="image">new_stock_image</property>
+                        <property 
name="image">find_and_replace_stock_image</property>
                         <property name="use_stock">False</property>
-                        <accelerator key="n" signal="activate" 
modifiers="GDK_CONTROL_MASK"/>
-                        <signal name="activate" 
handler="GNUNET_GTK_main_menu_create_pseudonym_activate_cb" swapped="no"/>
+                        <signal name="activate" 
handler="GNUNET_GTK_main_menu_file_manage_pseudonyms_activate_cb" swapped="no"/>
                       </object>
                     </child>
                     <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>
+                      <object class="GtkImageMenuItem" 
id="GNUNET_GTK_main_menu_file_organize_namespaces">
+                        <property name="label" translatable="yes">Organize 
_your own namespaces</property>
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
+                        <property name="tooltip_text" translatable="yes">Opens 
namespace organizer dialog to adjust the list of your own namespaces and select 
the one that you will publish in.</property>
                         <property name="use_underline">True</property>
                         <property name="image">index_stock_image</property>
                         <property name="use_stock">False</property>
-                        <signal name="activate" 
handler="GNUNET_GTK_main_menu_file_advertise_pseudonym_activate_cb" 
swapped="no"/>
+                        <signal name="activate" 
handler="GNUNET_GTK_main_menu_file_organize_namespaces_activate_cb" 
swapped="no"/>
                       </object>
                     </child>
                     <child>
-                      <object class="GtkMenuItem" 
id="GNUNET_GTK_main_menu_file_manage_pseudonyms">
-                        <property name="use_action_appearance">False</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <property name="tooltip_text" translatable="yes">Opens 
namespace manager dialog to adjust the list of namespaces you want to use, as 
well as get detailed information about all discovered namespaces.</property>
-                        <property name="label" translatable="yes">_Manage 
namespaces</property>
-                        <property name="use_underline">True</property>
-                        <signal name="activate" 
handler="GNUNET_GTK_main_menu_file_manage_pseudonyms_activate_cb" swapped="no"/>
-                      </object>
-                    </child>
-                    <child>
                       <object class="GtkSeparatorMenuItem" 
id="GNUNET_GTK_main_menu_file_sep3">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
@@ -349,7 +335,6 @@
                     <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>
@@ -366,7 +351,6 @@
             </child>
             <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>
@@ -377,7 +361,6 @@
                     <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>
@@ -392,7 +375,6 @@
             </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="can_focus">False</property>
                 <property name="label" translatable="yes">_View</property>
@@ -403,7 +385,6 @@
                     <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>
@@ -415,7 +396,6 @@
                     </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>
@@ -427,7 +407,6 @@
                     </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>
@@ -443,7 +422,6 @@
             </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="can_focus">False</property>
                 <property name="label" translatable="yes">_Help</property>
@@ -455,7 +433,6 @@
                     <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>
@@ -515,14 +492,12 @@
                 <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="use_action_appearance">False</property>
                     <property name="image_position">right</property>
                     <signal name="toggled" 
handler="GNUNET_FS_GTK_search_namespace_dropdown_button_toggled_cb" 
swapped="no"/>
                     <signal name="leave-notify-event" 
handler="GNUNET_FS_GTK_search_namespace_selector_window_leave_notify_event_cb" 
swapped="no"/>
@@ -554,11 +529,9 @@
                 <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>
-                    <property name="use_action_appearance">False</property>
                     <property name="image">find_stock_image</property>
                     <signal name="clicked" 
handler="main_window_search_button_clicked_cb" swapped="no"/>
                   </object>
@@ -577,6 +550,10 @@
                 <property name="has_focus">True</property>
                 <property name="invisible_char">●</property>
                 <property name="invisible_char_set">True</property>
+                <property name="primary_icon_activatable">False</property>
+                <property name="secondary_icon_activatable">False</property>
+                <property name="primary_icon_sensitive">True</property>
+                <property name="secondary_icon_sensitive">True</property>
                 <signal name="key-press-event" 
handler="main_window_search_entry_key_press_event_cb" swapped="no"/>
               </object>
               <packing>
@@ -728,7 +705,6 @@
                 </child>
                 <child>
                   <object class="GtkVBox" 
id="GNUNET_GTK_search_frame_download_vbox">
-                    <property name="visible">False</property>
                     <property name="can_focus">False</property>
                     <child>
                       <object class="GtkHBox" 
id="GNUNET_GTK_search_frame_download_into_hbox">
@@ -810,7 +786,6 @@
                         <child>
                           <object class="GtkButton" 
id="GNUNET_GTK_search_frame_download_filename_change_button">
                             <property name="label">…</property>
-                            <property 
name="use_action_appearance">False</property>
                             <property name="height_request">1</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
@@ -886,7 +861,6 @@
                         <child>
                           <object class="GtkCheckButton" 
id="GNUNET_GTK_search_frame_download_recursive_checkbox">
                             <property name="label" 
translatable="yes">Recursive</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>
@@ -913,7 +887,6 @@
                         <child>
                           <object class="GtkButton" 
id="GNUNET_GTK_search_frame_download_download_button">
                             <property name="label" 
translatable="yes">Download!</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>
@@ -984,9 +957,6 @@
                         <property name="enable_grid_lines">both</property>
                         <signal name="button-press-event" 
handler="GNUNET_GTK_main_window_metadata_treeview_button_press_event_cb" 
swapped="no"/>
                         <signal name="popup-menu" 
handler="GNUNET_GTK_main_window_metadata_treeview_popup_menu_cb" swapped="no"/>
-                        <child internal-child="selection">
-                          <object class="GtkTreeSelection" 
id="treeview-selection1"/>
-                        </child>
                         <child>
                           <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_main_window_metadata_type_column">
                             <property name="sizing">autosize</property>
@@ -1062,7 +1032,6 @@
     <property name="can_focus">False</property>
     <child>
       <object class="GtkMenuItem" id="Copy selection">
-        <property name="use_action_appearance">False</property>
         <property name="visible">True</property>
         <property name="can_focus">False</property>
         <property name="label" translatable="yes">Copy selection</property>
@@ -1102,9 +1071,6 @@
             <property name="tooltip_column">3</property>
             <signal name="button-press-event" 
handler="GNUNET_FS_GTK_namespace_selector_treeview_button_press_event_cb" 
swapped="no"/>
             <signal name="button-release-event" 
handler="GNUNET_FS_GTK_namespace_selector_treeview_button_release_event_cb" 
swapped="no"/>
-            <child internal-child="selection">
-              <object class="GtkTreeSelection" id="treeview-selection2"/>
-            </child>
             <child>
               <object class="GtkTreeViewColumn" id="name_column">
                 <property name="sizing">autosize</property>
@@ -1139,11 +1105,9 @@
         <child>
           <object class="GtkButton" 
id="namespace_selector_manage_namespaces_button">
             <property name="label" translatable="yes">_Manage 
namespaces</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_action_appearance">False</property>
             <property name="use_underline">True</property>
             <signal name="clicked" 
handler="namespace_selector_manage_namespaces_button_clicked_cb" swapped="no"/>
           </object>

Added: gnunet-gtk/contrib/gnunet_fs_gtk_namespace_organizer.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_fs_gtk_namespace_organizer.glade                  
        (rev 0)
+++ gnunet-gtk/contrib/gnunet_fs_gtk_namespace_organizer.glade  2013-03-03 
01:58:05 UTC (rev 26266)
@@ -0,0 +1,276 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+  <requires lib="gtk+" version="2.20"/>
+  <!-- interface-naming-policy project-wide -->
+  <object class="GtkDialog" id="GNUNET_GTK_namespace_organizer_dialog">
+    <property name="can_focus">False</property>
+    <property name="border_width">5</property>
+    <property name="title" translatable="yes">Namespace selection</property>
+    <property name="destroy_with_parent">True</property>
+    <property name="type_hint">dialog</property>
+    <property name="has_separator">True</property>
+    <signal name="response" 
handler="GNUNET_GTK_namespace_organizer_dialog_response_cb" swapped="no"/>
+    <child internal-child="vbox">
+      <object class="GtkVBox" id="GNUNET_GTK_namespace_organizer_vbox">
+        <property name="visible">True</property>
+        <property name="can_focus">False</property>
+        <property name="spacing">2</property>
+        <child internal-child="action_area">
+          <object class="GtkHButtonBox" 
id="GNUNET_GTK_namespace_organizer_action_area">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="layout_style">end</property>
+            <child>
+              <object class="GtkButton" 
id="GNUNET_GTK_namespace_organizer_close_button">
+                <property name="label">gtk-close</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Saves all 
changes made in this dialog to disk and closes the dialog.</property>
+                <property name="use_stock">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">False</property>
+                <property name="position">0</property>
+              </packing>
+            </child>
+          </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="GtkLabel" 
id="GNUNET_GTK_namespace_organizer_namespaces_label">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="xalign">0</property>
+            <property name="yalign">0</property>
+            <property name="label" translatable="yes">List of the namespaces 
you have private key for.
+You can create new namespaces, delete or rename existing ones.
+Select one of the namespaces that will be (optionally) used for 
publishing.</property>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="position">1</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkScrolledWindow" 
id="GNUNET_GTK_namespace_organizer_scrolled">
+            <property name="visible">True</property>
+            <property name="can_focus">True</property>
+            <property name="hscrollbar_policy">automatic</property>
+            <property name="vscrollbar_policy">automatic</property>
+            <child>
+              <object class="GtkTreeView" 
id="GNUNET_GTK_namespace_organizer_namespaces_treeview">
+                <property name="height_request">300</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property 
name="model">GNUNET_GTK_namespace_organizer_namespaces_liststore</property>
+                <property name="headers_clickable">False</property>
+                <property name="rules_hint">True</property>
+                <property name="enable_search">False</property>
+                <property name="show_expanders">False</property>
+                <property name="enable_grid_lines">horizontal</property>
+                <property name="tooltip_column">5</property>
+                <child>
+                  <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_namespace_organizer_namespaces_treeview_column_usethis">
+                    <property name="sizing">autosize</property>
+                    <property name="title" translatable="yes">Use for 
publications</property>
+                    <child>
+                      <object class="GtkCellRendererToggle" 
id="GNUNET_GTK_namespace_organizer_namespaces_treeview_column_usethis_toggle">
+                        <property name="radio">True</property>
+                        <signal name="toggled" 
handler="GNUNET_GTK_namespace_organizer_namespaces_treeview_column_usethis_toggle_toggled_cb"
 swapped="no"/>
+                      </object>
+                      <attributes>
+                        <attribute name="active">3</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_namespace_organizer_namespaces_treeview_column_name">
+                    <property name="sizing">autosize</property>
+                    <property name="title" translatable="yes">Name</property>
+                    <property name="expand">True</property>
+                    <child>
+                      <object class="GtkCellRendererText" 
id="GNUNET_GTK_namespace_organizer_namespaces_treeview_column_name_text">
+                        <property name="editable">True</property>
+                        <signal name="edited" 
handler="GNUNET_GTK_namespace_organizer_namespaces_treeview_column_name_text_edited_cb"
 swapped="no"/>
+                      </object>
+                      <attributes>
+                        <attribute name="text">0</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+                <child>
+                  <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_namespace_organizer_namespaces_treeview_column_key">
+                    <property name="sizing">autosize</property>
+                    <property name="title" translatable="yes">Hash of the 
public key</property>
+                    <child>
+                      <object class="GtkCellRendererText" 
id="GNUNET_GTK_namespace_organizer_namespaces_treeview_column_key_text"/>
+                      <attributes>
+                        <attribute name="text">1</attribute>
+                      </attributes>
+                    </child>
+                  </object>
+                </child>
+              </object>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">True</property>
+            <property name="fill">True</property>
+            <property name="position">2</property>
+          </packing>
+        </child>
+        <child>
+          <object class="GtkHBox" 
id="GNUNET_GTK_namespace_organizer_namespaces_extra_buttons_hbox">
+            <property name="visible">True</property>
+            <property name="can_focus">False</property>
+            <property name="spacing">5</property>
+            <child>
+              <object class="GtkButton" 
id="GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_unconfirmation_button">
+                <property name="label" translatable="yes">No, keep 
it.</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <signal name="clicked" 
handler="GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_unconfirmation_button_clicked_cb"
 swapped="no"/>
+              </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="GtkButton" 
id="GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_confirmation_button">
+                <property name="label" translatable="yes">Yes, delete 
it!</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <signal name="clicked" 
handler="GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_confirmation_button_clicked_cb"
 swapped="no"/>
+              </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>
+            <child>
+              <object class="GtkLabel" 
id="GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_confirmation_label">
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Are you sure? Once 
you delete the private key of a namespace, it's lost forever!</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="pack_type">end</property>
+                <property name="position">2</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" 
id="GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_button">
+                <property name="label" translatable="yes">Delete</property>
+                <property name="visible">True</property>
+                <property name="sensitive">False</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Delete 
namespace key.</property>
+                <signal name="clicked" 
handler="GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_button_clicked_cb"
 swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="pack_type">end</property>
+                <property name="position">3</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" 
id="GNUNET_GTK_namespace_organizer_namespaces_create_namespace_button">
+                <property name="label" translatable="yes">Create</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Generate new 
namespace.</property>
+                <signal name="clicked" 
handler="GNUNET_GTK_namespace_organizer_namespaces_create_namespace_button_clicked_cb"
 swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">4</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkButton" 
id="GNUNET_GTK_namespace_organizer_namespaces_advertise_namespace_button">
+                <property name="label" translatable="yes">Advertise</property>
+                <property name="visible">True</property>
+                <property name="can_focus">True</property>
+                <property name="receives_default">True</property>
+                <property name="tooltip_text" translatable="yes">Make 
namespace findable with global file-sharing searches.</property>
+                <signal name="clicked" 
handler="GNUNET_GTK_namespace_organizer_namespaces_advertise_namespace_button_clicked_cb"
 swapped="no"/>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">5</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkLabel" 
id="GNUNET_GTK_namespace_organizer_namespaces_create_namespace_progress_label">
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Generating new 
namespace key...</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">6</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkSpinner" 
id="GNUNET_GTK_namespace_organizer_namespaces_create_namespace_progress_spinner">
+                <property name="can_focus">False</property>
+                <property name="active">True</property>
+              </object>
+              <packing>
+                <property name="expand">False</property>
+                <property name="fill">True</property>
+                <property name="position">7</property>
+              </packing>
+            </child>
+          </object>
+          <packing>
+            <property name="expand">False</property>
+            <property name="fill">True</property>
+            <property name="padding">5</property>
+            <property name="position">3</property>
+          </packing>
+        </child>
+      </object>
+    </child>
+    <action-widgets>
+      <action-widget 
response="-5">GNUNET_GTK_namespace_organizer_close_button</action-widget>
+    </action-widgets>
+  </object>
+  <object class="GtkListStore" 
id="GNUNET_GTK_namespace_organizer_namespaces_liststore">
+    <columns>
+      <!-- column-name NamespaceName -->
+      <column type="gchararray"/>
+      <!-- column-name NamespaceKey -->
+      <column type="gchararray"/>
+      <!-- column-name NamespaceKeyBinary -->
+      <column type="gpointer"/>
+      <!-- column-name UseThis -->
+      <column type="gboolean"/>
+      <!-- column-name ActualName -->
+      <column type="gchararray"/>
+      <!-- column-name ToolTip -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
+</interface>

Modified: gnunet-gtk/contrib/gnunet_fs_gtk_publish_dialog.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_fs_gtk_publish_dialog.glade       2013-03-03 
01:57:23 UTC (rev 26265)
+++ gnunet-gtk/contrib/gnunet_fs_gtk_publish_dialog.glade       2013-03-03 
01:58:05 UTC (rev 26266)
@@ -22,6 +22,20 @@
       <column type="guint"/>
     </columns>
   </object>
+  <object class="GtkTreeStore" id="GNUNET_GTK_indentifiers_treestore">
+    <columns>
+      <!-- column-name Identifier -->
+      <column type="gchararray"/>
+      <!-- column-name UpdateIdentifier -->
+      <column type="gchararray"/>
+      <!-- column-name Description -->
+      <column type="gchararray"/>
+      <!-- column-name PathToOriginal -->
+      <column type="gchararray"/>
+      <!-- column-name IdentifierMarkedUp -->
+      <column type="gchararray"/>
+    </columns>
+  </object>
   <object class="GtkWindow" id="GNUNET_GTK_master_publish_dialog">
     <property name="height_request">500</property>
     <property name="can_focus">False</property>
@@ -40,349 +54,618 @@
             <property name="visible">True</property>
             <property name="can_focus">True</property>
             <child>
-              <object class="GtkVBox" 
id="GNUNET_GTK_master_publish_dialog_top_vbox">
+              <object class="GtkFrame" 
id="GNUNET_GTK_master_publish_dialog_top_frame">
+                <property name="height_request">200</property>
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
+                <property name="label_xalign">0</property>
+                <property name="label_yalign">0</property>
+                <property name="shadow_type">in</property>
                 <child>
-                  <object class="GtkScrolledWindow" 
id="GNUNET_GTK_master_publish_dialog_file_information_scrolled_window">
+                  <object class="GtkVBox" 
id="GNUNET_GTK_master_publish_dialog_top_vbox">
                     <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property name="hadjustment">adjustment5</property>
-                    <property name="vadjustment">adjustment6</property>
-                    <property name="hscrollbar_policy">automatic</property>
-                    <property name="vscrollbar_policy">automatic</property>
-                    <property name="shadow_type">in</property>
+                    <property name="can_focus">False</property>
                     <child>
-                      <object class="GtkTreeView" 
id="GNUNET_GTK_master_publish_dialog_file_information_tree_view">
-                        <property name="height_request">100</property>
+                      <object class="GtkScrolledWindow" 
id="GNUNET_GTK_master_publish_dialog_file_information_scrolled_window">
                         <property name="visible">True</property>
                         <property name="can_focus">True</property>
-                        <property 
name="model">GNUNET_GTK_file_sharing_publishing_tree_store</property>
-                        <property name="hadjustment">adjustment5</property>
-                        <property name="vadjustment">adjustment6</property>
-                        <property name="headers_clickable">False</property>
-                        <property 
name="expander_column">GNUNET_GTK_master_publish_dialog_file_information_filename_column</property>
-                        <property name="search_column">0</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="GNUNET_GTK_master_publish_dialog_file_information_filesize_column">
-                            <property name="sizing">autosize</property>
-                            <property name="title">Size</property>
+                          <object class="GtkTreeView" 
id="GNUNET_GTK_master_publish_dialog_file_information_tree_view">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property 
name="model">GNUNET_GTK_file_sharing_publishing_tree_store</property>
+                            <property name="headers_clickable">False</property>
+                            <property 
name="expander_column">GNUNET_GTK_master_publish_dialog_file_information_filename_column</property>
+                            <property name="search_column">0</property>
+                            <property name="enable_tree_lines">True</property>
                             <child>
-                              <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_file_information_filesize_renderer"/>
-                              <attributes>
-                                <attribute name="text">0</attribute>
-                              </attributes>
+                              <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_file_information_filesize_column">
+                                <property name="sizing">autosize</property>
+                                <property name="title">Size</property>
+                                <child>
+                                  <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_file_information_filesize_renderer"/>
+                                  <attributes>
+                                    <attribute name="text">0</attribute>
+                                  </attributes>
+                                </child>
+                              </object>
                             </child>
-                          </object>
-                        </child>
-                        <child>
-                          <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_file_information_filename_column">
-                            <property name="sizing">autosize</property>
-                            <property name="title">Filename</property>
-                            <property name="expand">True</property>
-                            <property name="clickable">True</property>
-                            <property name="reorderable">True</property>
-                            <property name="sort_indicator">True</property>
                             <child>
-                              <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_file_information_filename_renderer"/>
-                              <attributes>
-                                <attribute name="text">2</attribute>
-                              </attributes>
+                              <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_file_information_filename_column">
+                                <property name="sizing">autosize</property>
+                                <property name="title">Filename</property>
+                                <property name="expand">True</property>
+                                <property name="clickable">True</property>
+                                <property name="reorderable">True</property>
+                                <property name="sort_indicator">True</property>
+                                <child>
+                                  <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_file_information_filename_renderer"/>
+                                  <attributes>
+                                    <attribute name="text">2</attribute>
+                                  </attributes>
+                                </child>
+                              </object>
                             </child>
                           </object>
                         </child>
                       </object>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
                     </child>
-                  </object>
-                  <packing>
-                    <property name="expand">True</property>
-                    <property name="fill">True</property>
-                    <property name="position">0</property>
-                  </packing>
-                </child>
-                <child>
-                  <object class="GtkHBox" 
id="GNUNET_GTK_master_dialog_modification_button_hbox">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
                     <child>
-                      <object class="GtkTable" 
id="GNUNET_GTK_master_publish_dialog_action_table">
+                      <object class="GtkHBox" 
id="GNUNET_GTK_master_dialog_modification_button_hbox">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="n_rows">2</property>
-                        <property name="n_columns">3</property>
                         <child>
-                          <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_add_button">
-                            <property name="label" translatable="yes">Add 
_File</property>
-                            <property 
name="use_action_appearance">False</property>
+                          <object class="GtkTable" 
id="GNUNET_GTK_master_publish_dialog_action_table">
                             <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="use_underline">True</property>
-                            <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_add_button_clicked_cb" swapped="no"/>
+                            <property name="can_focus">False</property>
+                            <property name="n_rows">2</property>
+                            <property name="n_columns">3</property>
+                            <child>
+                              <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_add_button">
+                                <property name="label" translatable="yes">Add 
_File</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property name="use_underline">True</property>
+                                <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_add_button_clicked_cb" swapped="no"/>
+                              </object>
+                            </child>
+                            <child>
+                              <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_new_button">
+                                <property name="label" 
translatable="yes">_Create empty directory</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property 
name="image">new_stock_image</property>
+                                <property name="use_underline">True</property>
+                                <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_new_button_clicked_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">3</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_open_button">
+                                <property name="label" translatable="yes">Add 
_Directory</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property name="use_underline">True</property>
+                                <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_open_button_clicked_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_edit_button">
+                                <property name="label">gtk-edit</property>
+                                <property name="visible">True</property>
+                                <property name="sensitive">False</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property name="use_stock">True</property>
+                                <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_edit_button_clicked_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_delete_button">
+                                <property name="label">gtk-delete</property>
+                                <property name="visible">True</property>
+                                <property name="sensitive">False</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property name="use_stock">True</property>
+                                <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_delete_button_clicked_cb" 
swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
                           </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="padding">25</property>
+                            <property name="position">0</property>
+                          </packing>
                         </child>
                         <child>
-                          <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_new_button">
-                            <property name="label" translatable="yes">_Create 
empty directory</property>
-                            <property 
name="use_action_appearance">False</property>
+                          <object class="GtkTable" 
id="GNUNET_GTK_master_publish_dialog_arrow_table">
                             <property name="visible">True</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="image">new_stock_image1</property>
-                            <property name="use_underline">True</property>
-                            <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_new_button_clicked_cb" swapped="no"/>
+                            <property name="can_focus">False</property>
+                            <property name="n_rows">2</property>
+                            <property name="n_columns">3</property>
+                            <property name="homogeneous">True</property>
+                            <child>
+                              <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_up_button">
+                                <property name="label">gtk-go-up</property>
+                                <property name="visible">True</property>
+                                <property name="sensitive">False</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property name="use_stock">True</property>
+                                <property name="xalign">0</property>
+                                <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_up_button_clicked_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_left_button">
+                                <property name="label" 
translatable="yes">_Left</property>
+                                <property name="visible">True</property>
+                                <property name="sensitive">False</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property 
name="image">left_stock_image</property>
+                                <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
+                                <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_left_button_clicked_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_down_button">
+                                <property name="label">gtk-go-down</property>
+                                <property name="visible">True</property>
+                                <property name="sensitive">False</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property name="use_stock">True</property>
+                                <property name="xalign">0</property>
+                                <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_down_button_clicked_cb" swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="left_attach">1</property>
+                                <property name="right_attach">2</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_right_button">
+                                <property name="label" 
translatable="yes">_Right</property>
+                                <property name="visible">True</property>
+                                <property name="sensitive">False</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">True</property>
+                                <property 
name="image">right_stock_image</property>
+                                <property name="use_underline">True</property>
+                                <property name="xalign">0</property>
+                                <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_right_button_clicked_cb" 
swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="left_attach">2</property>
+                                <property name="right_attach">3</property>
+                                <property name="top_attach">1</property>
+                                <property name="bottom_attach">2</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
                           </object>
                           <packing>
-                            <property name="left_attach">1</property>
-                            <property name="right_attach">3</property>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="padding">25</property>
+                            <property name="position">1</property>
                           </packing>
                         </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </object>
+                </child>
+                <child type="label_item">
+                  <placeholder/>
+                </child>
+              </object>
+              <packing>
+                <property name="resize">True</property>
+                <property name="shrink">False</property>
+              </packing>
+            </child>
+            <child>
+              <object class="GtkFrame" 
id="GNUNET_GTK_master_publish_dialog_bottom_frame">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label_xalign">0</property>
+                <property name="label_yalign">0</property>
+                <property name="shadow_type">in</property>
+                <child>
+                  <object class="GtkVBox" 
id="GNUNET_GTK_master_publish_dialog_bottom_vbox">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <child>
+                      <object class="GtkHBox" id="dummy_hbox_1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
                         <child>
-                          <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_open_button">
-                            <property name="label" translatable="yes">Add 
_Directory</property>
-                            <property 
name="use_action_appearance">False</property>
+                          <object class="GtkCheckButton" 
id="GNUNET_GTK_master_publish_dialog_global_checkbox">
+                            <property name="label" translatable="yes">Publish 
in global namespace</property>
                             <property name="visible">True</property>
                             <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="use_underline">True</property>
-                            <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_open_button_clicked_cb" swapped="no"/>
+                            <property name="receives_default">False</property>
+                            <property name="tooltip_text" 
translatable="yes">Make unsigned publication that will be searchable in global 
(anonymous) namespace.
+Disabling this is equivalent to pressing the "Remove all Keywords" button 
before starting the publication.</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" 
handler="GNUNET_GTK_master_publish_dialog_global_checkbox_toggled_cb" 
swapped="no"/>
                           </object>
                           <packing>
-                            <property name="top_attach">1</property>
-                            <property name="bottom_attach">2</property>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_edit_button">
-                            <property name="label">gtk-edit</property>
-                            <property 
name="use_action_appearance">False</property>
+                          <placeholder/>
+                        </child>
+                      </object>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <object class="GtkHBox" 
id="GNUNET_GTK_master_publish_dialog_own_hbox">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <object class="GtkCheckButton" 
id="GNUNET_GTK_master_publish_dialog_own_checkbox">
+                            <property name="label" translatable="yes">Publish 
in your own namespace</property>
                             <property name="visible">True</property>
-                            <property name="sensitive">False</property>
                             <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="use_stock">True</property>
-                            <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_edit_button_clicked_cb" swapped="no"/>
+                            <property name="receives_default">False</property>
+                            <property name="tooltip_text" 
translatable="yes">Sign the publication with your private key (pseudonym), and 
give it an identifier, under which it will be found in your namespace.
+Other users will be able to browse anything you publish in your namespace (if 
you maintain a root element), or get separate files from your namespace by 
their identifiers, and be assured that these files come from the same 
(anonymous) publisher.
+
+Unless specifically disabled in the configuration file, global namespace 
publications will also advertise your namespace, if you enable both global and 
private namespace publication.
+
+Despite all that, private namespace publications are just as anonymous as 
global namespace publications.
+
+Publishing in both global and private namespaces will not double storage 
requirements for published files.</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" 
handler="GNUNET_GTK_master_publish_dialog_own_checkbox_toggled_cb" 
swapped="no"/>
                           </object>
                           <packing>
-                            <property name="left_attach">1</property>
-                            <property name="right_attach">2</property>
-                            <property name="top_attach">1</property>
-                            <property name="bottom_attach">2</property>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_delete_button">
-                            <property name="label">gtk-delete</property>
-                            <property 
name="use_action_appearance">False</property>
+                          <object class="GtkLabel" 
id="GNUNET_GTK_master_publish_dialog_own_label">
                             <property name="visible">True</property>
-                            <property name="sensitive">False</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="use_stock">True</property>
-                            <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_delete_button_clicked_cb" 
swapped="no"/>
+                            <property name="can_focus">False</property>
+                            <property name="label">&lt;filled with the name of 
selected default namespace&gt;</property>
                           </object>
                           <packing>
-                            <property name="left_attach">2</property>
-                            <property name="right_attach">3</property>
-                            <property name="top_attach">1</property>
-                            <property name="bottom_attach">2</property>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
                           </packing>
                         </child>
                       </object>
                       <packing>
                         <property name="expand">False</property>
                         <property name="fill">True</property>
-                        <property name="padding">25</property>
-                        <property name="position">0</property>
+                        <property name="position">1</property>
                       </packing>
                     </child>
                     <child>
-                      <object class="GtkTable" 
id="GNUNET_GTK_master_publish_dialog_arrow_table">
+                      <object class="GtkVBox" 
id="GNUNET_GTK_master_publish_dialog_own_vbox">
                         <property name="visible">True</property>
                         <property name="can_focus">False</property>
-                        <property name="n_rows">2</property>
-                        <property name="n_columns">3</property>
-                        <property name="homogeneous">True</property>
                         <child>
-                          <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_up_button">
-                            <property name="label">gtk-go-up</property>
-                            <property 
name="use_action_appearance">False</property>
+                          <object class="GtkHBox" 
id="GNUNET_GTK_master_publish_dialog_identifier_hbox">
                             <property name="visible">True</property>
-                            <property name="sensitive">False</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="use_stock">True</property>
-                            <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_up_button_clicked_cb" swapped="no"/>
+                            <property name="can_focus">False</property>
+                            <child>
+                              <object class="GtkLabel" 
id="GNUNET_GTK_master_publish_dialog_identifier_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="xalign">0</property>
+                                <property name="label" 
translatable="yes">Identifier:</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkEntry" 
id="GNUNET_GTK_master_publish_dialog_identifier_entry">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="tooltip_text" 
translatable="yes">Identifier under which this publication will be found in 
your namespace.
+Publications made in your namespace use only these identifiers, one per 
publication, instead of keywords.
+Type in an identifier, or select one of the update identifiers (from previous 
updateable publications) in the list below.</property>
+                                <property name="invisible_char">●</property>
+                                <property 
name="primary_icon_activatable">False</property>
+                                <property 
name="secondary_icon_activatable">False</property>
+                                <property 
name="primary_icon_sensitive">True</property>
+                                <property 
name="secondary_icon_sensitive">True</property>
+                                <signal name="changed" 
handler="GNUNET_GTK_master_publish_dialog_identifier_entry_changed_cb" 
swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">True</property>
+                                <property name="fill">True</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
                           </object>
                           <packing>
-                            <property name="left_attach">1</property>
-                            <property name="right_attach">2</property>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_left_button">
-                            <property name="label" 
translatable="yes">_Left</property>
-                            <property 
name="use_action_appearance">False</property>
+                          <object class="GtkExpander" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_expander">
                             <property name="visible">True</property>
-                            <property name="sensitive">False</property>
                             <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="image">left_stock_image1</property>
-                            <property name="use_underline">True</property>
-                            <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_left_button_clicked_cb" swapped="no"/>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child type="label">
+                              <object class="GtkLabel" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" 
translatable="yes">Previous identifiers</property>
+                              </object>
+                            </child>
                           </object>
                           <packing>
-                            <property name="top_attach">1</property>
-                            <property name="bottom_attach">2</property>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_down_button">
-                            <property name="label">gtk-go-down</property>
-                            <property 
name="use_action_appearance">False</property>
-                            <property name="visible">True</property>
-                            <property name="sensitive">False</property>
+                          <object class="GtkScrolledWindow" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_scrolled">
                             <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property name="use_stock">True</property>
-                            <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_down_button_clicked_cb" swapped="no"/>
+                            <property 
name="hscrollbar_policy">automatic</property>
+                            <property 
name="vscrollbar_policy">automatic</property>
+                            <property name="shadow_type">in</property>
+                            <child>
+                              <object class="GtkTreeView" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_treeview">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="model">GNUNET_GTK_indentifiers_treestore</property>
+                                <property 
name="headers_clickable">False</property>
+                                <property 
name="expander_column">GNUNET_GTK_master_publish_dialog_previous_identifiers_treeview_id_column</property>
+                                <property name="enable_search">False</property>
+                                <property 
name="enable_tree_lines">True</property>
+                                <child>
+                                  <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_treeview_id_column">
+                                    <property name="sizing">autosize</property>
+                                    <property name="title" 
translatable="yes">Identifier</property>
+                                    <child>
+                                      <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_treeview_id_renderer"/>
+                                      <attributes>
+                                        <attribute name="markup">4</attribute>
+                                      </attributes>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_treeview_update_id_column">
+                                    <property name="sizing">autosize</property>
+                                    <property name="title" 
translatable="yes">Update identifier</property>
+                                    <child>
+                                      <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_treeview_update_id_renderer"/>
+                                      <attributes>
+                                        <attribute name="markup">1</attribute>
+                                      </attributes>
+                                    </child>
+                                  </object>
+                                </child>
+                                <child>
+                                  <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_treeview_description_column">
+                                    <property name="sizing">autosize</property>
+                                    <property name="title" 
translatable="yes">Description</property>
+                                    <child>
+                                      <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_previous_identifiers_treeview_description_renderer"/>
+                                      <attributes>
+                                        <attribute name="text">2</attribute>
+                                      </attributes>
+                                    </child>
+                                  </object>
+                                </child>
+                              </object>
+                            </child>
                           </object>
                           <packing>
-                            <property name="left_attach">1</property>
-                            <property name="right_attach">2</property>
-                            <property name="top_attach">1</property>
-                            <property name="bottom_attach">2</property>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">2</property>
                           </packing>
                         </child>
                         <child>
-                          <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_right_button">
-                            <property name="label" 
translatable="yes">_Right</property>
-                            <property 
name="use_action_appearance">False</property>
+                          <object class="GtkHBox" id="dummy_hbox_2">
                             <property name="visible">True</property>
-                            <property name="sensitive">False</property>
-                            <property name="can_focus">True</property>
-                            <property name="receives_default">True</property>
-                            <property 
name="image">right_stock_image1</property>
-                            <property name="use_underline">True</property>
-                            <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_right_button_clicked_cb" 
swapped="no"/>
+                            <property name="can_focus">False</property>
+                            <child>
+                              <object class="GtkCheckButton" 
id="GNUNET_GTK_master_publish_dialog_updateable_checkbox">
+                                <property name="label" translatable="yes">Make 
publication updateable</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property 
name="receives_default">False</property>
+                                <property name="tooltip_text" 
translatable="yes">Enable and specify an update identifier to make this 
publication updateable.</property>
+                                <property name="draw_indicator">True</property>
+                                <signal name="toggled" 
handler="GNUNET_GTK_master_publish_dialog_updateable_checkbox_toggled_cb" 
swapped="no"/>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
                           </object>
                           <packing>
-                            <property name="left_attach">2</property>
-                            <property name="right_attach">3</property>
-                            <property name="top_attach">1</property>
-                            <property name="bottom_attach">2</property>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">3</property>
                           </packing>
                         </child>
                         <child>
-                          <placeholder/>
+                          <object class="GtkHBox" 
id="GNUNET_GTK_master_publish_dialog_update_id_hbox">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <child>
+                              <object class="GtkLabel" 
id="GNUNET_GTK_master_publish_dialog_update_id_label">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="label" 
translatable="yes">Update identifier:</property>
+                              </object>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">True</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <object class="GtkEntry" 
id="GNUNET_GTK_master_publish_dialog_update_id_entry">
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="tooltip_text" 
translatable="yes">Identifier under which the updated version will be published 
later.
+GNUnet clients will use it to try to find updated version of this publication 
automatically.
+Leaving this field blank makes publication unupdateable.</property>
+                                <property name="invisible_char">●</property>
+                                <property 
name="invisible_char_set">True</property>
+                                <property 
name="primary_icon_activatable">False</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">1</property>
+                              </packing>
+                            </child>
+                          </object>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">True</property>
+                            <property name="position">4</property>
+                          </packing>
                         </child>
-                        <child>
-                          <placeholder/>
-                        </child>
                       </object>
                       <packing>
-                        <property name="expand">False</property>
+                        <property name="expand">True</property>
                         <property name="fill">True</property>
-                        <property name="padding">25</property>
-                        <property name="position">1</property>
+                        <property name="position">2</property>
                       </packing>
                     </child>
                   </object>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">True</property>
-                    <property name="position">1</property>
-                  </packing>
                 </child>
-              </object>
-              <packing>
-                <property name="resize">False</property>
-                <property name="shrink">False</property>
-              </packing>
-            </child>
-            <child>
-              <object class="GtkScrolledWindow" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_scrolled_window">
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="hadjustment">adjustment1</property>
-                <property name="vadjustment">adjustment2</property>
-                <property name="hscrollbar_policy">automatic</property>
-                <property name="vscrollbar_policy">automatic</property>
-                <property name="shadow_type">in</property>
-                <child>
-                  <object class="GtkTreeView" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_tree_view">
-                    <property name="visible">True</property>
-                    <property name="can_focus">True</property>
-                    <property 
name="model">GNUNET_GTK_pseudonym_tree_store</property>
-                    <property name="hadjustment">adjustment1</property>
-                    <property name="vadjustment">adjustment2</property>
-                    <property name="headers_clickable">False</property>
-                    <property name="reorderable">True</property>
-                    <property name="search_column">0</property>
-                    <property name="rubber_banding">True</property>
-                    <property name="enable_grid_lines">both</property>
-                    <child>
-                      <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_name_column">
-                        <property name="resizable">True</property>
-                        <property name="title">Pseudonym</property>
-                        <property name="clickable">True</property>
-                        <property name="reorderable">True</property>
-                        <property name="sort_indicator">True</property>
-                        <child>
-                          <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_name_renderer"/>
-                          <attributes>
-                            <attribute name="text">0</attribute>
-                          </attributes>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_identifier_column">
-                        <property name="sizing">autosize</property>
-                        <property name="title">Current identifier</property>
-                        <property name="clickable">True</property>
-                        <child>
-                          <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_identifier_renderer">
-                            <signal name="edited" 
handler="GNUNET_GTK_master_publish_dialog_pseudonym_identifier_renderer_edited_cb"
 swapped="no"/>
-                          </object>
-                          <attributes>
-                            <attribute name="editable">8</attribute>
-                            <attribute name="text">2</attribute>
-                          </attributes>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_updates_column">
-                        <property name="sizing">autosize</property>
-                        <property name="title">Update identifier</property>
-                        <child>
-                          <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer">
-                            <signal name="edited" 
handler="GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer_edited_cb" 
swapped="no"/>
-                          </object>
-                          <attributes>
-                            <attribute name="editable">7</attribute>
-                            <attribute name="text">5</attribute>
-                          </attributes>
-                        </child>
-                      </object>
-                    </child>
-                    <child>
-                      <object class="GtkTreeViewColumn" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_description_column">
-                        <property name="resizable">True</property>
-                        <property name="title">Description (of existing 
content)</property>
-                        <child>
-                          <object class="GtkCellRendererText" 
id="GNUNET_GTK_master_publish_dialog_pseudonym_description_renderer">
-                            <property name="wrap_mode">word</property>
-                          </object>
-                          <attributes>
-                            <attribute name="text">6</attribute>
-                          </attributes>
-                        </child>
-                      </object>
-                    </child>
-                  </object>
+                <child type="label_item">
+                  <placeholder/>
                 </child>
               </object>
               <packing>
@@ -405,7 +688,6 @@
             <child>
               <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_execute_button">
                 <property name="label" translatable="yes">_Execute</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>
@@ -422,12 +704,13 @@
             <child>
               <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_clear_button">
                 <property name="label" translatable="yes">Remove all 
_Keywords</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>
+                <property name="tooltip_text" translatable="yes">This button 
removes all keywords from all files and directories in this dialog.
+This is useful if you want to get rid of the automatically extracted keywords 
to make sure that your published file(s) are only available from the resulting 
URI or from keywords that you manually enter after clicking this button.
+Note that meta data is unaffected when using this function.</property>
                 <property name="use_underline">True</property>
-                <property name="tooltip_text" translatable="yes">This button 
removes all keywords from all files and directories in this dialog.  This is 
useful if you want to get rid of the automatically extracted keywords to make 
sure that your published file(s) are only available from the resulting URI or 
from keywords that you manually enter after clicking this button.  Note that 
meta data is unaffected when using this function.</property>
                 <signal name="clicked" 
handler="GNUNET_GTK_master_publish_dialog_clear_button_clicked_cb" 
swapped="no"/>
               </object>
               <packing>
@@ -440,7 +723,6 @@
             <child>
               <object class="GtkButton" 
id="GNUNET_GTK_master_publish_dialog_cancel_button">
                 <property name="label" translatable="yes">_Cancel</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>
@@ -464,80 +746,29 @@
       </object>
     </child>
   </object>
-  <object class="GtkAdjustment" id="adjustment6">
-    <property name="upper">100</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-  </object>
-  <object class="GtkTreeStore" id="GNUNET_GTK_pseudonym_tree_store">
-    <columns>
-      <!-- column-name local_name -->
-      <column type="gchararray"/>
-      <!-- column-name namespace_handle -->
-      <column type="gpointer"/>
-      <!-- column-name last_id -->
-      <column type="gchararray"/>
-      <!-- column-name last_uri -->
-      <column type="gchararray"/>
-      <!-- column-name last_meta -->
-      <column type="gpointer"/>
-      <!-- column-name next_id -->
-      <column type="gchararray"/>
-      <!-- column-name last_description_from_meta -->
-      <column type="gchararray"/>
-      <!-- column-name next_id_editable -->
-      <column type="gboolean"/>
-      <!-- column-name current_id_editable -->
-      <column type="gboolean"/>
-    </columns>
-  </object>
-  <object class="GtkAdjustment" id="adjustment1">
-    <property name="upper">100</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">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>
-  </object>
-  <object class="GtkAdjustment" id="adjustment5">
-    <property name="upper">100</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-  </object>
-  <object class="GtkImage" id="left_stock_image">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-go-back</property>
-  </object>
-  <object class="GtkImage" id="left_stock_image1">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-go-back</property>
-  </object>
   <object class="GtkImage" id="new_stock_image">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
     <property name="stock">gtk-new</property>
   </object>
-  <object class="GtkImage" id="new_stock_image1">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-new</property>
-  </object>
   <object class="GtkImage" id="right_stock_image">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
     <property name="stock">gtk-go-forward</property>
   </object>
-  <object class="GtkImage" id="right_stock_image1">
+  <object class="GtkImage" id="left_stock_image">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
-    <property name="stock">gtk-go-forward</property>
+    <property name="stock">gtk-go-back</property>
   </object>
-  <object class="GtkSizeGroup" id="sizegroup1">
+  <object class="GtkSizeGroup" 
id="GNUNET_GTK_master_publish_dialog_labels_sizegroup">
     <widgets>
+      <widget name="GNUNET_GTK_master_publish_dialog_identifier_label"/>
+      <widget name="GNUNET_GTK_master_publish_dialog_update_id_label"/>
+    </widgets>
+  </object>
+  <object class="GtkSizeGroup" 
id="GNUNET_GTK_master_publish_dialog_master_buttons_sizegroup">
+    <widgets>
       <widget name="GNUNET_GTK_master_publish_dialog_execute_button"/>
       <widget name="GNUNET_GTK_master_publish_dialog_cancel_button"/>
     </widgets>

Modified: gnunet-gtk/src/fs/Makefile.am
===================================================================
--- gnunet-gtk/src/fs/Makefile.am       2013-03-03 01:57:23 UTC (rev 26265)
+++ gnunet-gtk/src/fs/Makefile.am       2013-03-03 01:58:05 UTC (rev 26266)
@@ -14,6 +14,7 @@
   gnunet-fs-gtk.c gnunet-fs-gtk.h \
   gnunet-fs-gtk_about.c \
   gnunet-fs-gtk_advertise-pseudonym.c \
+  gnunet-fs-gtk_advertise-pseudonym.h \
   gnunet-fs-gtk_anonymity-widgets.c gnunet-fs-gtk_anonymity-widgets.h \
   gnunet-fs-gtk_common.c gnunet-fs-gtk_common.h \
   gnunet-fs-gtk_create-pseudonym.c \
@@ -28,7 +29,11 @@
   gnunet-fs-gtk_unindex.c gnunet-fs-gtk_unindex.h \
   gnunet-fs-gtk_publish-dialog.c \
   gnunet-fs-gtk_publish-edit-dialog.c gnunet-fs-gtk_publish-edit-dialog.h \
-  gnunet-fs-gtk_namespace_manager.c 
+  gnunet-fs-gtk_namespace_organizer.c \
+  gnunet-fs-gtk_namespace_organizer.h \
+  gnunet-fs-gtk_namespace_manager.c \
+  gnunet-fs-gtk_namespace_manager.h
+
 gnunet_fs_gtk_LDADD = \
   $(top_builddir)/src/lib/libgnunetgtk.la \
   @GTK_LIBS@ \

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk.h
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk.h   2013-03-03 01:57:23 UTC (rev 26265)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk.h   2013-03-03 01:58:05 UTC (rev 26266)
@@ -59,6 +59,9 @@
   GtkWindow *ns_manager;
   gulong ns_manager_delete_handler_id;
 
+  GtkWindow *ns_organizer;
+  gulong ns_organizer_delete_handler_id;
+
   GtkFileChooser *download_location_chooser;
   GtkEntry *download_name_entry;
   GtkComboBox *download_anonymity_combo;

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk_advertise-pseudonym.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_advertise-pseudonym.c       2013-03-03 
01:57:23 UTC (rev 26265)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_advertise-pseudonym.c       2013-03-03 
01:58:05 UTC (rev 26266)
@@ -28,6 +28,7 @@
 #include "gnunet-fs-gtk_common.h"
 #include "gnunet-fs-gtk.h"
 #include "gnunet-fs-gtk_publish-edit-dialog.h"
+#include "gnunet-fs-gtk_advertise-pseudonym.h"
 
 
 /**
@@ -153,9 +154,6 @@
   struct GNUNET_FS_Namespace *ns;
   struct GNUNET_FS_Namespace *nso;
   GtkWindow *transient;
-  struct NamespaceAdvertisementContext *nds;
-  struct GNUNET_CONTAINER_MetaData *meta;
-  struct GNUNET_FS_BlockOptions bo;
 
   if (GTK_RESPONSE_OK != response_id)
   {
@@ -192,6 +190,23 @@
   gtk_widget_destroy (GTK_WIDGET (dialog));
   g_object_unref (G_OBJECT (builder));
 
+  GNUNET_FS_GTK_advertise_namespace (ns, transient);
+}
+
+/**
+ * Call the publication editor dialog in namespace advertising mode,
+ * and publish the namespace when it's OK'ed.
+ *
+ * @param ns namespace to advertise (takes ownership of it)
+ * @param transient_for parent window for the dialog
+ */
+void
+GNUNET_FS_GTK_advertise_namespace (struct GNUNET_FS_Namespace *ns, GtkWindow 
*transient_for)
+{
+  struct NamespaceAdvertisementContext *nds;
+  struct GNUNET_FS_BlockOptions bo;
+  struct GNUNET_CONTAINER_MetaData *meta;
+
   nds = GNUNET_malloc (sizeof (struct NamespaceAdvertisementContext));
   nds->ns = ns;
   memset (&bo, 0, sizeof (struct GNUNET_FS_BlockOptions));
@@ -204,8 +219,8 @@
       GNUNET_FS_file_information_create_empty_directory (NULL, NULL, NULL, 
meta,
                                                          &bo, NULL);
   GNUNET_CONTAINER_meta_data_destroy (meta);
-  GNUNET_FS_GTK_edit_publish_dialog (transient, 
-                                    nds->fip, 
+  GNUNET_FS_GTK_edit_publish_dialog (transient_for,
+                                    nds->fip,
                                     GNUNET_YES,
                                      &adv_pseudonym_edit_publish_dialog_cb,
                                      nds);

Added: gnunet-gtk/src/fs/gnunet-fs-gtk_advertise-pseudonym.h
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_advertise-pseudonym.h                       
        (rev 0)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_advertise-pseudonym.h       2013-03-03 
01:58:05 UTC (rev 26266)
@@ -0,0 +1,45 @@
+/*
+     This file is part of GNUnet
+     (C) 2005, 2006, 2010, 2012 Christian Grothoff (and other contributing 
authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+#ifndef GNUNET_FS_GTK_ADVERTISE_PSEUDONYM_H
+#define GNUNET_FS_GTK_ADVERTISE_PSEUDONYM_H
+
+/**
+ * @file src/fs/gnunet-fs-gtk_advertise-pseudonym.h
+ * @author Christian Grothoff
+ * @brief run the advertising dialog (using the edit-publish 
+ *        dialog functions) and finally do the advertising
+ */
+#include "gnunet-fs-gtk_common.h"
+
+/**
+ * Call the publication editor dialog in namespace advertising mode,
+ * and publish the namespace when it's OK'ed.
+ *
+ * @param ns namespace to advertise (takes ownership of it)
+ * @param transient_for parent window for the dialog
+ */
+void
+GNUNET_FS_GTK_advertise_namespace (struct GNUNET_FS_Namespace *ns, GtkWindow 
*transient_for);
+
+#endif
+
+/* end of gnunet-fs-gtk_advertise-pseudonym.h */
+

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk_download-save-as.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_download-save-as.c  2013-03-03 01:57:23 UTC 
(rev 26265)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_download-save-as.c  2013-03-03 01:58:05 UTC 
(rev 26266)
@@ -316,7 +316,7 @@
   if (de->is_recursive)
     opt |= GNUNET_FS_DOWNLOAD_OPTION_RECURSIVE;
   len = GNUNET_FS_uri_chk_get_file_size (de->uri);
-  if (NULL != de->sr->result)
+  if ((NULL != de->sr) && (NULL != de->sr->result))
   {
     GNUNET_break (NULL !=
                   GNUNET_FS_download_start_from_search (fs, 

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk_main-window-search.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_main-window-search.c        2013-03-03 
01:57:23 UTC (rev 26265)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_main-window-search.c        2013-03-03 
01:58:05 UTC (rev 26266)
@@ -80,7 +80,7 @@
     GtkTreeIter iter;
 
     nsid = NULL;    
-    ref = g_object_get_data (G_OBJECT (main_ctx->ns_dropdown_button), 
"selected-row-reference");
+    ref = main_ctx->selected_ns_row;
     if (NULL != ref)
     {
       GtkTreePath *namespace_treepath;

Added: gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_manager.h
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_manager.h                         
(rev 0)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_manager.h 2013-03-03 01:58:05 UTC 
(rev 26266)
@@ -0,0 +1,36 @@
+/*
+     This file is part of GNUnet
+     (C) 2005, 2006, 2010, 2012 Christian Grothoff (and other contributing 
authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file src/fs/gnunet-fs-gtk_namespace_manager.h
+ * @author LRN
+ */
+
+#ifndef GNUNET_FS_GTK_NAMESPACE_MANAGER_H
+#define GNUNET_FS_GTK_NAMESPACE_MANAGER_H
+
+#include "gnunet-fs-gtk_common.h"
+#include "gnunet-fs-gtk.h"
+
+GtkObject *
+GNUNET_GTK_namespace_manager_open (struct GNUNET_GTK_MainWindowContext 
*main_ctx);
+
+#endif /* GNUNET_FS_GTK_NAMESPACE_MANAGER_H */
+/* end of gnunet-fs-gtk_namespace_manager.c */

Added: gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_organizer.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_organizer.c                       
        (rev 0)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_organizer.c       2013-03-03 
01:58:05 UTC (rev 26266)
@@ -0,0 +1,744 @@
+/*
+     This file is part of GNUnet
+     (C) 2005, 2006, 2010, 2012 Christian Grothoff (and other contributing 
authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file src/fs/gnunet-fs-gtk_namespace_organizer.c
+ * @author LRN
+ */
+#include "gnunet-fs-gtk_common.h"
+#include "gnunet-fs-gtk.h"
+#include "gnunet-fs-gtk_advertise-pseudonym.h"
+#include <gnunet/gnunet_util_lib.h>
+#include <gnunet/gnunet_fs_service.h>
+
+struct GNUNET_GTK_NamespaceSelectorContext
+{
+  GtkBuilder *builder;
+  GtkWidget *my_ns;
+  GtkTreeSelection *my_ns_sel;
+  GtkListStore *my_ns_store;
+  GtkWindow *namespace_organizer;
+  GtkWidget *create_button;
+  GtkWidget *delete_button;
+  GtkWidget *advertise_button;
+  GtkWidget *do_delete_button;
+  GtkWidget *do_keep_button;
+  GtkWidget *progress_spinner;
+  GtkWidget *progress_label;
+  GtkWidget *confirmation_label;
+  char *default_ns;
+  GtkTreeRowReference *default_ns_rref;
+  struct GNUNET_GTK_MainWindowContext *main_ctx;
+
+  struct GNUNET_FS_NamespaceCreationContext *nscreator;
+};
+
+#define GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN 0
+#define GNUNET_GTK_MY_NAMESPACES_KEY_COLUMN 1
+#define GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN 2
+#define GNUNET_GTK_MY_NAMESPACES_USE_THIS_COLUMN 3
+#define GNUNET_GTK_MY_NAMESPACES_ACTUAL_NAME_COLUMN 4
+
+void
+GNUNET_GTK_namespace_organizer_namespaces_treeview_column_name_text_edited_cb (
+    GtkCellRendererText *renderer, gchar *path, gchar *new_text,
+    gpointer user_data)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx = user_data;
+  GtkTreePath *tree_path;
+  GtkTreeIter iter;
+
+  if (strlen (new_text) == 0)
+    return;
+
+  tree_path = gtk_tree_path_new_from_string (path);
+  if (tree_path != NULL)
+  {
+    if (gtk_tree_model_get_iter (GTK_TREE_MODEL (ctx->my_ns_store),
+        &iter, tree_path))
+    {
+      struct GNUNET_HashCode *nsid;
+      char *old_name;
+      gtk_tree_model_get (GTK_TREE_MODEL (ctx->my_ns_store), &iter,
+          GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN, &old_name,
+          GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN, &nsid,
+          -1);
+
+      if ((NULL == nsid) ||
+          (GNUNET_OK == GNUNET_FS_namespace_rename (
+              GNUNET_FS_GTK_get_fs_handle (), old_name, new_text)))
+      {
+        gtk_list_store_set (ctx->my_ns_store, &iter,
+            GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN, new_text, -1);
+      }
+
+      GNUNET_free (old_name);
+    }
+    gtk_tree_path_free (tree_path);
+  }
+}
+
+/**
+ * Iterate over items in the liststore, find the one that has
+ * KEY_BINARY == NULL - that is the item for which the key is
+ * being generated.
+ * We need this because we don't store a rowreference to the item,
+ * although maybe we should...
+ *
+ * @param ctx NS organizer context
+ * @param iter pointer to GTK Tree iterator. If the call succeeds,
+ *             iter will refer to the item found. 
+ * @return TRUE if item is found (and *iter is valid), FALSE otherwise
+ */
+static gboolean
+find_item_being_generated (struct GNUNET_GTK_NamespaceSelectorContext *ctx, 
GtkTreeIter *iter)
+{
+  gint row_count;
+  struct GNUNET_HashCode *nsid;
+
+  row_count = gtk_tree_model_iter_n_children (
+      GTK_TREE_MODEL (ctx->my_ns_store), NULL);
+
+  if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (
+      ctx->my_ns_store), iter))
+  {
+    gint i;
+    for (i = 0; i < row_count; i++)
+    {
+      gtk_tree_model_get (GTK_TREE_MODEL (ctx->my_ns_store), iter,
+          GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN, &nsid,
+          -1);
+      if (nsid == NULL)
+        return TRUE;
+      if (TRUE != gtk_tree_model_iter_next (GTK_TREE_MODEL (
+        ctx->my_ns_store), iter))
+        break;
+    }
+  }
+  return FALSE;
+}
+
+static void
+stop_generation (struct GNUNET_GTK_NamespaceSelectorContext *ctx)
+{
+  GtkTreeIter iter;
+  GNUNET_FS_namespace_create_stop (ctx->nscreator);
+  ctx->nscreator = NULL;
+  if (find_item_being_generated (ctx, &iter))
+    gtk_list_store_remove (ctx->my_ns_store, &iter);
+  gtk_widget_set_visible (ctx->progress_spinner, FALSE);
+  gtk_widget_set_visible (ctx->progress_label, FALSE);
+}
+
+static void
+free_lists_contents (struct GNUNET_GTK_NamespaceSelectorContext *ctx)
+{
+  GtkTreeIter iter;
+  gint i;
+  gint row_count;
+  struct GNUNET_HashCode *nsid;
+
+  row_count = gtk_tree_model_iter_n_children (GTK_TREE_MODEL (
+      ctx->my_ns_store), NULL);
+  if (! gtk_tree_model_get_iter_first (GTK_TREE_MODEL (
+      ctx->my_ns_store), &iter))
+    return;
+
+  for (i = 0; i < row_count; i++)
+  {
+    gtk_tree_model_get (GTK_TREE_MODEL (ctx->my_ns_store), &iter,
+        GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN, &nsid,
+        -1);
+    GNUNET_free (nsid);
+    if (TRUE != gtk_tree_model_iter_next (GTK_TREE_MODEL (
+      ctx->my_ns_store), &iter))
+      break;
+  }
+
+  gtk_list_store_clear (ctx->my_ns_store);
+}
+
+void
+GNUNET_GTK_namespace_organizer_dialog_response_cb (GtkDialog *dialog,
+    gint response_id, gpointer user_data)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx = user_data;
+  switch (response_id)
+  {
+  case GTK_RESPONSE_CLOSE:
+  default:
+    if (ctx->nscreator)
+      stop_generation (ctx);
+    free_lists_contents (ctx);
+    gtk_widget_destroy (GTK_WIDGET (ctx->namespace_organizer));
+    GNUNET_free (ctx);
+  }
+}
+
+static void
+save_default_ns_reference (struct GNUNET_GTK_NamespaceSelectorContext *ctx, 
GtkTreeIter *iter)
+{
+  GtkTreeRowReference *ref;
+  GtkTreePath *rowpath;
+
+  rowpath = gtk_tree_model_get_path (GTK_TREE_MODEL (ctx->my_ns_store), iter); 
 
+  if (rowpath)
+  {
+    ref = gtk_tree_row_reference_new (GTK_TREE_MODEL (ctx->my_ns_store), 
rowpath);
+    if (ref)
+    {
+      gtk_tree_row_reference_free (ctx->default_ns_rref);
+      ctx->default_ns_rref = ref;
+    }
+    gtk_tree_path_free (rowpath);
+  }
+}
+
+
+static void
+try_make_default (struct GNUNET_GTK_NamespaceSelectorContext *ctx, GtkTreeIter 
*toggled)
+{
+  GtkTreeIter iter;
+  gchar *new_default_ns;
+  gint i;
+  gint row_count;
+  GtkTreePath *path;
+
+  row_count = gtk_tree_model_iter_n_children (
+      GTK_TREE_MODEL (ctx->my_ns_store), NULL);
+  if (! gtk_tree_model_get_iter_first (
+      GTK_TREE_MODEL (ctx->my_ns_store), &iter))
+    return;
+
+  path = gtk_tree_row_reference_get_path (ctx->default_ns_rref);
+  if (path)
+  {
+    /* We know where previous default was, only untoggle that item */
+    GtkTreeIter old_default;
+    if (gtk_tree_model_get_iter (GTK_TREE_MODEL (ctx->my_ns_store), 
&old_default, path))
+    {
+      gtk_list_store_set (ctx->my_ns_store, &old_default,
+          GNUNET_GTK_MY_NAMESPACES_USE_THIS_COLUMN, FALSE,
+          -1);
+    }
+    gtk_tree_path_free (path);
+  }
+  else
+  {
+    /* Just untoggle all items */
+    for (i = 0; i < row_count; i++)
+    {
+      gtk_list_store_set (ctx->my_ns_store, &iter,
+          GNUNET_GTK_MY_NAMESPACES_USE_THIS_COLUMN, FALSE,
+          -1);
+      if (TRUE != gtk_tree_model_iter_next (
+          GTK_TREE_MODEL (ctx->my_ns_store), &iter))
+        break;
+    }
+  }
+
+  gtk_list_store_set (ctx->my_ns_store, toggled,
+      GNUNET_GTK_MY_NAMESPACES_USE_THIS_COLUMN, TRUE, -1);
+  gtk_tree_model_get (GTK_TREE_MODEL (ctx->my_ns_store), toggled,
+      GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN, &new_default_ns, -1);
+
+  save_default_ns_reference (ctx, toggled);
+
+  if (new_default_ns)
+  {
+    ctx->default_ns = GNUNET_strdup (new_default_ns);
+    GNUNET_CONFIGURATION_set_value_string (
+       (struct GNUNET_CONFIGURATION_Handle *) GNUNET_FS_GTK_get_configuration 
(),
+      "gnunet-fs-gtk", "DEFAULT_NAMESPACE", ctx->default_ns);
+
+    g_free (new_default_ns);
+  }
+}
+
+
+
+/**
+ * Callback with information about local (!) namespaces.
+ * Contains the names of the local namespace and the global
+ * ID.
+ *
+ * @param cls closure
+ * @param name human-readable identifier of the namespace
+ * @param id hash identifier for the namespace
+ */
+static void
+populate_my_ns_list (void *cls, const char *name,
+    const struct GNUNET_HashCode * id)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx = cls;
+
+  struct GNUNET_CRYPTO_HashAsciiEncoded identifier;
+  GtkTreeIter my_iter;
+  struct GNUNET_HashCode *nsid;
+  gboolean is_default;
+
+  nsid = GNUNET_malloc (sizeof (struct GNUNET_HashCode));
+  *nsid = *id;
+
+  GNUNET_CRYPTO_hash_to_enc (nsid, &identifier);
+
+  if (NULL == ctx->default_ns)
+  {
+    ctx->default_ns = GNUNET_strdup (name);
+    GNUNET_CONFIGURATION_set_value_string (
+       (struct GNUNET_CONFIGURATION_Handle *) GNUNET_FS_GTK_get_configuration 
(),
+      "gnunet-fs-gtk", "DEFAULT_NAMESPACE", ctx->default_ns);
+    is_default = TRUE;
+  }
+  else
+    is_default = (0 == strcmp (name, ctx->default_ns)) ? TRUE : FALSE;
+
+  gtk_list_store_insert_with_values (ctx->my_ns_store, &my_iter, G_MAXINT,
+      GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN, name,
+      GNUNET_GTK_MY_NAMESPACES_KEY_COLUMN, identifier.encoding,
+      GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN, nsid,
+      GNUNET_GTK_MY_NAMESPACES_USE_THIS_COLUMN, is_default,
+      GNUNET_GTK_MY_NAMESPACES_ACTUAL_NAME_COLUMN, NULL,
+      -1);
+
+  if (is_default)
+    save_default_ns_reference (ctx, &my_iter);
+}
+
+static void
+set_normal_state (struct GNUNET_GTK_NamespaceSelectorContext *ctx, gboolean 
anything_selected)
+{
+  gtk_widget_set_visible (ctx->do_delete_button, FALSE);
+  gtk_widget_set_visible (ctx->do_keep_button, FALSE);
+  gtk_widget_set_visible (ctx->confirmation_label, FALSE);
+
+  gtk_widget_set_sensitive (ctx->advertise_button, anything_selected);
+  gtk_widget_set_sensitive (ctx->delete_button, anything_selected);
+  if (NULL == ctx->nscreator)
+    gtk_widget_set_sensitive (ctx->create_button, TRUE);
+}
+
+static void
+my_ns_selection_changed (GtkTreeSelection *treeselection,
+    gpointer user_data)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx = user_data;
+  GtkTreeIter iter;
+  struct GNUNET_HashCode *nsid;
+  gboolean selected;
+
+  nsid = NULL;
+  selected = gtk_tree_selection_get_selected (ctx->my_ns_sel, NULL, &iter);
+  if (selected)
+    gtk_tree_model_get (GTK_TREE_MODEL (ctx->my_ns_store), &iter,
+        GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN, &nsid, -1);
+  if (NULL == nsid)
+    selected = FALSE;
+  set_normal_state (ctx, selected);
+}
+
+GtkWindow *
+GNUNET_GTK_namespace_organizer_open (struct GNUNET_GTK_MainWindowContext 
*main_ctx)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx;
+  const struct GNUNET_CONFIGURATION_Handle *cfg;
+
+  ctx = GNUNET_malloc (sizeof (struct GNUNET_GTK_NamespaceSelectorContext));
+  ctx->builder = GNUNET_GTK_get_new_builder 
("gnunet_fs_gtk_namespace_organizer.glade", ctx);
+  if (ctx->builder == NULL)
+  {
+    GNUNET_break (0);
+    GNUNET_free (ctx);
+    return NULL;
+  }
+
+  ctx->main_ctx = main_ctx;
+
+  ctx->nscreator = NULL;
+
+  /* initialize widget references */
+  ctx->my_ns = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
+      "GNUNET_GTK_namespace_organizer_namespaces_treeview"));
+  ctx->my_ns_sel = gtk_tree_view_get_selection (GTK_TREE_VIEW (
+      ctx->my_ns));
+  ctx->my_ns_store = GTK_LIST_STORE (gtk_tree_view_get_model (
+      GTK_TREE_VIEW (ctx->my_ns)));
+  ctx->namespace_organizer = GTK_WINDOW (gtk_builder_get_object (
+      ctx->builder, "GNUNET_GTK_namespace_organizer_dialog"));
+  ctx->create_button = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
+      "GNUNET_GTK_namespace_organizer_namespaces_create_namespace_button"));
+  ctx->advertise_button = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
+      "GNUNET_GTK_namespace_organizer_namespaces_advertise_namespace_button"));
+  ctx->delete_button = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
+      "GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_button"));
+  ctx->do_delete_button = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
+      
"GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_confirmation_button"));
+  ctx->do_keep_button = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
+      
"GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_unconfirmation_button"));
+  ctx->progress_spinner = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
+      
"GNUNET_GTK_namespace_organizer_namespaces_create_namespace_progress_spinner"));
+  ctx->progress_label = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
+      
"GNUNET_GTK_namespace_organizer_namespaces_create_namespace_progress_label"));
+  ctx->confirmation_label = GTK_WIDGET (gtk_builder_get_object (ctx->builder,
+      
"GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_confirmation_label"));
+
+  /* connect signals; FIXME-GTK3: these could be connected with (modern) Glade 
*/
+  g_signal_connect (G_OBJECT (ctx->my_ns_sel), "changed",
+      G_CALLBACK (my_ns_selection_changed), ctx);
+
+  cfg = GNUNET_FS_GTK_get_configuration ();
+
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg,
+      "gnunet-fs-gtk", "DEFAULT_NAMESPACE", &ctx->default_ns))
+    ctx->default_ns = NULL;
+
+  gtk_widget_set_sensitive (ctx->advertise_button, FALSE);
+  gtk_widget_set_sensitive (ctx->delete_button, FALSE);
+
+  gtk_widget_set_visible (ctx->do_delete_button, FALSE);
+  gtk_widget_set_visible (ctx->do_keep_button, FALSE);
+  gtk_widget_set_visible (ctx->progress_spinner, FALSE);
+  gtk_widget_set_visible (ctx->progress_label, FALSE);
+  gtk_widget_set_visible (ctx->confirmation_label, FALSE);
+
+  /* populate namespace model */
+  GNUNET_FS_namespace_list (GNUNET_FS_GTK_get_fs_handle (),
+      populate_my_ns_list, ctx);
+
+  /* show dialog */
+  gtk_window_present (ctx->namespace_organizer);
+  return ctx->namespace_organizer;
+}
+
+void
+GNUNET_GTK_namespace_organizer_dialog_destroy_cb (GtkWindow *object, gpointer 
user_data)
+{
+  struct GNUNET_GTK_MainWindowContext *ctx = user_data;
+  g_signal_handler_disconnect (object, ctx->ns_organizer_delete_handler_id);
+  g_object_unref (G_OBJECT (ctx->ns_organizer));
+  ctx->ns_organizer = NULL;
+  ctx->ns_organizer_delete_handler_id = 0;
+  return;
+}
+
+void
+GNUNET_GTK_open_ns_organizer (struct GNUNET_GTK_MainWindowContext *ctx)
+{
+  if (ctx->ns_organizer != NULL)
+  {
+    gtk_window_present (ctx->ns_organizer);
+    return;
+  }
+
+  ctx->ns_organizer = GNUNET_GTK_namespace_organizer_open (ctx);
+  if (ctx->ns_organizer == NULL)
+    return;
+
+  g_object_ref (G_OBJECT (ctx->ns_organizer));
+  ctx->ns_organizer_delete_handler_id = g_signal_connect (G_OBJECT 
(ctx->ns_organizer), "destroy", G_CALLBACK 
(GNUNET_GTK_namespace_organizer_dialog_destroy_cb), ctx);
+}
+
+void
+GNUNET_GTK_namespace_organizer_namespaces_advertise_namespace_button_clicked_cb
 (
+    GtkButton *button, gpointer user_data)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx = user_data;
+  GtkTreeIter iter;
+  gchar *name;
+  gboolean selected;
+  struct GNUNET_HashCode id;
+  struct GNUNET_HashCode *nsid;
+
+  nsid = NULL;
+  name = NULL;
+  if (gtk_tree_selection_get_selected (ctx->my_ns_sel, NULL, &iter))
+    gtk_tree_model_get (GTK_TREE_MODEL (ctx->my_ns_store), &iter,
+        GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN, &name, 
+        GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN, &nsid,
+        -1);
+  if (NULL != nsid)
+  {
+    struct GNUNET_FS_Namespace *ns;
+    ns = GNUNET_FS_namespace_open_existing (GNUNET_FS_GTK_get_fs_handle (), 
name);
+    if (ns)
+      GNUNET_FS_GTK_advertise_namespace (ns, ctx->namespace_organizer);
+  }
+  g_free (name);
+}
+
+void
+GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_unconfirmation_button_clicked_cb
 (
+    GtkButton *button, gpointer user_data)
+{
+  set_normal_state (user_data, TRUE);
+}
+
+
+void
+GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_confirmation_button_clicked_cb
 (
+    GtkButton *button, gpointer user_data)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx = user_data;
+  GtkTreeIter iter;
+  gchar *name;
+  gboolean selected;
+  struct GNUNET_HashCode id;
+  struct GNUNET_HashCode *nsid;
+
+  nsid = NULL;
+  name = NULL;
+  selected = gtk_tree_selection_get_selected (ctx->my_ns_sel, NULL, &iter);
+  if (selected)
+    gtk_tree_model_get (GTK_TREE_MODEL (ctx->my_ns_store), &iter,
+        GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN, &name, 
+        GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN, &nsid,
+        -1);
+  if (NULL == nsid)
+    selected = FALSE;
+
+  if (selected)
+  {
+    struct GNUNET_FS_Namespace *ns;
+    ns = GNUNET_FS_namespace_open_existing (GNUNET_FS_GTK_get_fs_handle (), 
name);
+    if (ns)
+    {
+      if (GNUNET_FS_namespace_get_public_key_hash (ns, &id))
+      {
+        if (0 == GNUNET_CRYPTO_hash_cmp (&id, nsid))
+        {
+          GtkTreeIter first;
+
+          GNUNET_free (nsid);
+          gtk_list_store_remove (ctx->my_ns_store, &iter);
+          GNUNET_FS_namespace_delete (ns, GNUNET_YES);
+
+          if (gtk_tree_model_get_iter_first (
+              GTK_TREE_MODEL (ctx->my_ns_store), &first))
+            try_make_default (ctx, &first);
+        }
+        else
+        {
+          /* We were trying to delete namespace FOO with key X
+           * but when we opened FOO, we discovered that its key is Y.
+           * Clearly this is not the right namespace (something changed
+           * the namespace list right under us?).
+           */
+           /* TODO: display error message */
+        }
+      }
+      else
+      {
+        /* We were trying to delete namespace FOO,
+         * but we can't even get its key
+         */
+        /* TODO: display error message */
+        GNUNET_FS_namespace_delete (ns, GNUNET_NO);
+      }
+    }
+  }
+  g_free (name);
+  set_normal_state (user_data, selected);
+}
+
+void
+GNUNET_GTK_namespace_organizer_namespaces_delete_namespace_button_clicked_cb (
+    GtkButton *button, gpointer user_data)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx = user_data;
+  gtk_widget_set_visible (ctx->do_delete_button, TRUE);
+  gtk_widget_set_visible (ctx->do_keep_button, TRUE);
+  gtk_widget_set_visible (ctx->confirmation_label, TRUE);
+  gtk_widget_set_sensitive (ctx->advertise_button, FALSE);
+  gtk_widget_set_sensitive (ctx->delete_button, FALSE);
+  gtk_widget_set_sensitive (ctx->create_button, FALSE);
+}
+
+char *
+generate_local_ns_name ()
+{
+  const char *table = 
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
+  size_t tablelen = strlen (table);
+  char random_str[9];
+  char *result;
+  int i;
+  for (i = 0; i < 8; i++)
+  {
+    uint32_t index = GNUNET_CRYPTO_random_u32 (GNUNET_CRYPTO_QUALITY_WEAK, 
tablelen);
+    GNUNET_assert (index < tablelen);
+    random_str[i] = table[index];
+  }
+  random_str[8] = '\0';
+
+  GNUNET_asprintf (&result, _("MyNamespace-%s"), random_str);
+  return result;
+}
+
+
+static void
+ns_created (void *cls, struct GNUNET_FS_Namespace *ns, const char *emsg)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx = cls;
+
+  GtkTreeIter iter;
+  gboolean found_item;
+  struct GNUNET_HashCode *nsid;
+  struct GNUNET_HashCode id;
+
+  gtk_widget_set_visible (ctx->progress_spinner, FALSE);
+  gtk_widget_set_visible (ctx->progress_label, FALSE);
+
+  /* We don't keep a row reference to the placeholder ns item,
+   * so let's find it (it's the only one with nsid == NULL)
+   */
+  ctx->nscreator = NULL;  
+
+  found_item = find_item_being_generated (ctx, &iter);
+
+  /* If ns was created, get its public key hash */
+  nsid = NULL;
+  if ((NULL != ns) && (GNUNET_OK == GNUNET_FS_namespace_get_public_key_hash 
(ns, &id)))
+  {
+    nsid = GNUNET_malloc (sizeof (struct GNUNET_HashCode));
+    memcpy (nsid, &id, sizeof (struct GNUNET_HashCode));
+  }
+
+  /* If anything of the above went wrong, or ns creation failed, we abort */
+  if ((NULL == ns) || (NULL == nsid) || (!found_item))
+  {
+    /* TODO: figure out how to present an error message to the user */
+    if (ns)
+      GNUNET_FS_namespace_delete (ns, GNUNET_NO);
+
+    if (nsid)
+      GNUNET_free (nsid);
+
+    if (found_item)
+      gtk_list_store_remove (ctx->my_ns_store, &iter);
+  }
+  else
+  {
+    gchar *actual_name;
+    gchar *name;
+    struct GNUNET_CRYPTO_HashAsciiEncoded identifier;
+
+    gtk_tree_model_get (GTK_TREE_MODEL (ctx->my_ns_store), &iter,
+        GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN, &name,
+        GNUNET_GTK_MY_NAMESPACES_ACTUAL_NAME_COLUMN, &actual_name,
+        -1);
+
+    /* Renaming was delayed until generation is finished. */
+    if (0 != strcmp (actual_name, name))
+      if (GNUNET_OK != GNUNET_FS_namespace_rename (
+          GNUNET_FS_GTK_get_fs_handle (), actual_name, name))
+      {
+        g_free (name);
+        name = g_strdup (actual_name);
+      }
+
+    GNUNET_CRYPTO_hash_to_enc (nsid, &identifier);
+
+    gtk_list_store_set (ctx->my_ns_store, &iter,
+        GNUNET_GTK_MY_NAMESPACES_KEY_COLUMN, identifier.encoding,
+        GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN, nsid,
+        GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN, name,
+        GNUNET_GTK_MY_NAMESPACES_ACTUAL_NAME_COLUMN, NULL,
+        -1);
+
+    g_free (actual_name);
+    g_free (name);
+  }
+}
+
+
+static void
+create_namespace (struct GNUNET_GTK_NamespaceSelectorContext *ctx)
+{
+  gchar *name;
+  GtkTreeIter my_iter;
+  struct GNUNET_FS_Namespace *ns;
+  gint row_count;
+
+  if (ctx->nscreator)
+    return;
+
+  ns = NULL;
+  name = NULL;
+  do
+  {
+    if (ns)
+      GNUNET_FS_namespace_delete (ns, GNUNET_NO);
+    GNUNET_free_non_null (name);
+    name = generate_local_ns_name ();
+    ns = GNUNET_FS_namespace_open_existing (GNUNET_FS_GTK_get_fs_handle (), 
name);
+  } while (NULL != ns);
+  
+  ctx->nscreator = GNUNET_FS_namespace_create_start (
+      GNUNET_FS_GTK_get_fs_handle (), name, ns_created, ctx);
+  if (NULL == ctx->nscreator)
+  {
+    GNUNET_free (name);
+    return;
+  }
+
+  gtk_list_store_insert_with_values (ctx->my_ns_store, &my_iter, G_MAXINT,
+      GNUNET_GTK_MY_NAMESPACES_NAME_COLUMN, name,
+      GNUNET_GTK_MY_NAMESPACES_ACTUAL_NAME_COLUMN, name,
+      GNUNET_GTK_MY_NAMESPACES_KEY_COLUMN, _("Key is not ready yet"),
+      GNUNET_GTK_MY_NAMESPACES_KEY_BINARY_COLUMN, NULL,
+      GNUNET_GTK_MY_NAMESPACES_USE_THIS_COLUMN, FALSE,
+      -1);
+
+  GNUNET_free (name);
+
+  gtk_widget_set_visible (ctx->progress_spinner, TRUE);
+  gtk_widget_set_visible (ctx->progress_label, TRUE);
+
+  row_count = gtk_tree_model_iter_n_children (
+      GTK_TREE_MODEL (ctx->my_ns_store), NULL);
+  if (row_count == 1)
+    try_make_default (ctx, &my_iter);
+}
+
+void
+GNUNET_GTK_namespace_organizer_namespaces_create_namespace_button_clicked_cb (
+    GtkButton *button, gpointer user_data)
+{
+  create_namespace (user_data);
+}
+
+void
+GNUNET_GTK_namespace_organizer_namespaces_treeview_column_usethis_toggle_toggled_cb
 (
+    GtkCellRendererToggle *cell_renderer, gchar *path, gpointer user_data)
+{
+  struct GNUNET_GTK_NamespaceSelectorContext *ctx = user_data;
+  GtkTreeIter iter;
+  if (gtk_tree_model_get_iter_from_string (GTK_TREE_MODEL (ctx->my_ns_store),
+      &iter, path))
+    try_make_default (ctx, &iter);
+}
+
+void
+GNUNET_GTK_main_menu_file_organize_namespaces_activate_cb (GtkMenuItem 
*menuitem,
+    gpointer user_data)
+{
+  GNUNET_GTK_open_ns_organizer (user_data);
+}
+
+/* end of gnunet-fs-gtk_namespace_organizer.c */

Added: gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_organizer.h
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_organizer.h                       
        (rev 0)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_namespace_organizer.h       2013-03-03 
01:58:05 UTC (rev 26266)
@@ -0,0 +1,36 @@
+/*
+     This file is part of GNUnet
+     (C) 2005, 2006, 2010, 2012 Christian Grothoff (and other contributing 
authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file src/fs/gnunet-fs-gtk_namespace_organizer.h
+ * @author LRN
+ */
+
+#ifndef GNUNET_FS_GTK_NAMESPACE_ORGANIZER_H
+#define GNUNET_FS_GTK_NAMESPACE_ORGANIZER_H
+
+#include "gnunet-fs-gtk_common.h"
+#include "gnunet-fs-gtk.h"
+
+GtkObject *
+GNUNET_GTK_namespace_selector_open (struct GNUNET_GTK_MainWindowContext 
*main_ctx);
+
+#endif /* GNUNET_FS_GTK_NAMESPACE_ORGANIZER_H */
+/* end of gnunet-fs-gtk_namespace_organizer.c */

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk_open-uri.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_open-uri.c  2013-03-03 01:57:23 UTC (rev 
26265)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_open-uri.c  2013-03-03 01:58:05 UTC (rev 
26266)
@@ -88,7 +88,7 @@
 
   uris = gtk_text_buffer_get_text (tb, &ti_start, &ti_end, FALSE);
   if (!GNUNET_GTK_get_selected_anonymity_level
-      (builder, "main_window_search_anonymity_combobox", &anonymity_level))
+      (builder, "GNUNET_GTK_open_url_dialog_anonymity_combobox", 
&anonymity_level))
   {
     GNUNET_break (0);
     gtk_widget_destroy (dialog);

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk_publish-dialog.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk_publish-dialog.c    2013-03-03 01:57:23 UTC 
(rev 26265)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk_publish-dialog.c    2013-03-03 01:58:05 UTC 
(rev 26266)
@@ -87,52 +87,32 @@
 /**
  * Columns in the pseudonym model.
  */
-enum PSEUDONYM_ModelColumns
+enum IDENTIFIERS_ModelColumns
   {
     /**
      * A gchararray.
      */
-    PSEUDONYM_MC_LOCAL_NAME = 0,
+    IDENTIFIERS_MC_ID = 0,
 
     /**
-     * A gpointer.
-     */
-    PSEUDONYM_MC_NAMESPACE_HANDLE = 1,
-
-    /**
      * A gchararray.
      */
-    PSEUDONYM_MC_LAST_ID = 2,
+    IDENTIFIERS_MC_UPDATE_ID = 1,
 
     /**
      * A gchararray.
      */
-    PSEUDONYM_MC_LAST_URI = 3,
+    IDENTIFIERS_MC_DESCRIPTION = 2,
 
     /**
-     * A gpointer.
-     */
-    PSEUDONYM_MC_LAST_META = 4,
-
-    /**
      * A gchararray.
      */
-    PSEUDONYM_MC_NEXT_ID = 5,
+    IDENTIFIERS_MC_PATH_TO_ORIGINAL = 3,
 
     /**
      * A gchararray.
      */
-    PSEUDONYM_MC_LAST_DESCRIPTION_FROM_META = 6,
-
-    /**
-     * A gboolean.
-     */
-    PSEUDONYM_MC_NEXT_ID_EDITABLE = 7,
-
-    /**
-     * A gboolean.
-     */
-    PSEUDONYM_MC_CURRENT_ID_EDITABLE = 8,
+    IDENTIFIERS_MC_ID_MARKED_UP = 4,
   };
 
 
@@ -158,16 +138,6 @@
   GtkWindow *master_pubdialog;
 
   /**
-   * Selected pseudonym.
-   */
-  GtkTreeSelection *pseudonym_selection;
-
-  /**
-   * Model with the list of (our) pseudonyms.
-   */
-  GtkTreeModel *pseudonym_treemodel;
-
-  /**
    * Tree view listing files to be published.
    */
   GtkTreeView *file_info_treeview;
@@ -212,6 +182,29 @@
    */
   GtkWidget *edit_button;
 
+  GtkWidget *global_checkbox;
+  GtkWidget *own_checkbox;
+  GtkWidget *own_label;
+  GtkTreeView *identifiers_treeview;
+  GtkTreeModel *identifiers_treemodel;
+  GtkTreeSelection *identifiers_selection;
+  GtkWidget *identifier_entry;
+  GtkWidget *updateable_checkbox;
+  GtkWidget *update_id_entry;
+
+  GtkWidget *own_vbox;
+  GtkWidget *update_id_hbox;
+
+  gchar *ns_name;
+  struct GNUNET_FS_Namespace *ns;
+
+  gchar *previous_id;
+
+  GtkWidget *vpaned;
+  GtkWidget *bottom_frame;
+  GtkWidget *identifiers_scrolled;
+  GtkWidget *identifiers_expander;
+
   /**
    * Button to publish all files from the dialog
    */
@@ -329,7 +322,9 @@
 };
 
 
+static void clear_keywords_from_tm (struct MainPublishingDialogContext *ctx);
 
+
 /* ************************ editing operations inside the master dialog 
********************* */
 
 
@@ -361,37 +356,32 @@
 
 
 /**
- * Update selectivity of buttons (up/down/left/right/cancel/execute) in the 
master dialog.
+ * Update selectivity of execute/cancel buttons in the master dialog.
  *
  * @param ctx master dialog to update selectivity for
  */
 static void
-update_selectivity (struct MainPublishingDialogContext *ctx)
+update_selectivity_execute_cancel (struct MainPublishingDialogContext *ctx)
 {
+  gboolean pub_in_global;
+  gboolean pub_in_own;
+  gboolean updateable;
+  const gchar *ns_id;
   GtkTreeIter iter;
-  GtkTreeIter parent;
-  GtkTreeIter pred;
-  int is_dir;
-  struct GNUNET_FS_FileInformation *fip;
-  int ns_ok;
-  gchar *namespace_id;
 
-  /* find out if a namespace was selected */
-  ns_ok = GNUNET_YES;
-  if (gtk_tree_selection_get_selected (ctx->pseudonym_selection, NULL, &iter))
-  {
-    gtk_tree_model_get (ctx->pseudonym_treemodel, &iter,
-                        PSEUDONYM_MC_LAST_ID, &namespace_id, -1);
-    if (namespace_id == NULL)
-      ns_ok = GNUNET_NO;
-    else
-      g_free (namespace_id);
-  }
+  pub_in_global = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(ctx->global_checkbox));
+  pub_in_own = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(ctx->own_checkbox));
+  updateable = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(ctx->updateable_checkbox));
+  gtk_widget_set_sensitive (ctx->update_id_hbox, updateable);
+  gtk_widget_set_sensitive (ctx->own_vbox, pub_in_own);
 
+  ns_id = gtk_entry_get_text (GTK_ENTRY (ctx->identifier_entry));
+
   /* Don't let the user close the dialog until all scanners are finished and
      their windows are closed */
   if ( (gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &iter)) && 
-       (ns_ok == GNUNET_YES) && 
+       (pub_in_global || pub_in_own) &&
+       ((!pub_in_own) || ((NULL != ns_id) && ('\0' != ns_id[0]))) &&
        (ctx->adddir_head == NULL) )
     gtk_widget_set_sensitive (ctx->execute_button, TRUE);
   else
@@ -402,8 +392,22 @@
     gtk_widget_set_sensitive (ctx->cancel_button, TRUE);
   else
     gtk_widget_set_sensitive (ctx->cancel_button, FALSE);
+}
 
-  /* now for the editing buttons... */
+/**
+ * Update selectivity of up/down/left/right buttons in the master dialog.
+ *
+ * @param ctx master dialog to update selectivity for
+ */
+static void
+update_selectivity_edit (struct MainPublishingDialogContext *ctx)
+{
+  GtkTreeIter iter;
+  GtkTreeIter parent;
+  GtkTreeIter pred;
+  int is_dir;
+  struct GNUNET_FS_FileInformation *fip;
+
   if (! gtk_tree_selection_get_selected (ctx->file_info_selection, NULL, 
&iter))
   {
     gtk_widget_set_sensitive (ctx->up_button, FALSE);
@@ -467,7 +471,7 @@
 {
   struct MainPublishingDialogContext *ctx = user_data;
 
-  update_selectivity (ctx);
+  update_selectivity_edit (ctx);
 }
 
 
@@ -517,7 +521,8 @@
                       PUBLISH_MC_REPLICATION_LEVEL,
                       (guint) bo->replication_level,
                       -1);
-  update_selectivity (ctx);
+  update_selectivity_edit (ctx);
+  update_selectivity_execute_cancel (ctx);
 }
 
 
@@ -624,68 +629,142 @@
     GNUNET_assert (TRUE == gtk_tree_model_get_iter (tm, newpos, path));
     gtk_tree_path_free (path);
     gtk_tree_selection_select_iter (ctx->file_info_selection, newpos);
-    update_selectivity (ctx);
+    update_selectivity_edit (ctx);
   }
 }
 
+void
+GNUNET_GTK_master_publish_dialog_global_checkbox_toggled_cb (
+    GtkToggleButton *togglebutton, gpointer user_data)
+{
+  update_selectivity_execute_cancel (user_data);
+}
 
-/**
- * User has changed the "update" identifier for the content in
- * the GtkTreeView.  Update the model.
- *
- * @param renderer pseudonym renderer that notified us about the edit
- * @param cpath where the edit happened
- * @param new_text the new value
- * @param user_data master publishing dialog context of our window
- */
-void 
-GNUNET_GTK_master_publish_dialog_pseudonym_updates_renderer_edited_cb 
(GtkCellRendererText * renderer, 
-                                                                      gchar * 
cpath,
-                                                                      gchar * 
new_text,
-                                                                      gpointer 
user_data)
+void
+GNUNET_GTK_master_publish_dialog_own_checkbox_toggled_cb (
+    GtkToggleButton *togglebutton, gpointer user_data)
 {
-  struct MainPublishingDialogContext *ctx = user_data;
-  GtkTreeIter iter;
+  update_selectivity_execute_cancel (user_data);
+}
 
-  if (! gtk_tree_model_get_iter_from_string (ctx->pseudonym_treemodel, &iter, 
cpath))
+void
+GNUNET_GTK_master_publish_dialog_updateable_checkbox_toggled_cb (
+    GtkToggleButton *togglebutton, gpointer user_data)
+{
+  update_selectivity_execute_cancel (user_data);
+}
+
+static gchar *
+generate_update_id (const gchar *new_text)
+{
+  gchar *dash;
+  gint64 num;
+  gchar *new_update_id;
+  gchar *copy_part;
+
+  copy_part = g_strdup (new_text);
+  dash = strrchr (copy_part, '-');
+  if (!dash)
+    num = 0;
+  else
   {
-    GNUNET_break (0);
-    return;
+    gchar *endptr;
+    num = g_ascii_strtoll (&dash[1], &endptr, 10);
+    if (((0 <= num) && (endptr == &dash[1])) || (G_MAXINT64 == num) || ('\0' 
!= endptr[0]))
+      num = 0;
+    else
+      dash[0] = '\0';
   }
-  gtk_tree_store_set (GTK_TREE_STORE (ctx->pseudonym_treemodel), &iter, 
-                      PSEUDONYM_MC_NEXT_ID, new_text, 
-                      -1);
-  update_selectivity (ctx);
+  if ('\0' != new_text[0])
+    new_update_id = g_strdup_printf ("%s-%" G_GINT64_FORMAT, copy_part, num + 
1);
+  else
+    new_update_id = g_strdup ("");
+  g_free (copy_part);
+  return new_update_id;
 }
 
+static gboolean
+update_id_is_autofilled (const gchar *existing_update_id, gchar *previous_id)
+{
+  gboolean result;
+  result = TRUE;
+  gchar *gen_update_id = generate_update_id (previous_id);
+  if (0 != strcmp (gen_update_id, existing_update_id))
+    result = FALSE;
+  g_free (gen_update_id);
+  return result;
+}
 
+static void
+maybe_change_update_id (struct MainPublishingDialogContext *ctx,
+    const gchar *new_text)
+{
+  const gchar *existing_update_id;
+  gchar *new_update_id;
+
+  new_update_id = NULL;
+  existing_update_id = gtk_entry_get_text (GTK_ENTRY (ctx->update_id_entry));
+
+  if (((NULL == ctx->previous_id) && ('\0' == existing_update_id[0]))
+      || update_id_is_autofilled (existing_update_id, ctx->previous_id))
+    new_update_id = generate_update_id (new_text);
+  if (new_update_id)
+    gtk_entry_set_text (GTK_ENTRY (ctx->update_id_entry), new_update_id);
+  g_free (new_update_id);
+
+  g_free (ctx->previous_id);
+  ctx->previous_id = g_strdup (new_text);
+}
+
+void
+GNUNET_GTK_master_publish_dialog_identifier_entry_changed_cb (
+    GtkWidget *widget, gpointer user_data)
+{
+  struct MainPublishingDialogContext *ctx = user_data;
+  const gchar *new_text;
+
+  new_text = gtk_entry_get_text (GTK_ENTRY (widget));
+
+  if (NULL == new_text)
+    return;
+  maybe_change_update_id (ctx, new_text);
+  update_selectivity_execute_cancel (ctx);
+}
+
+
 /**
- * User has changed the "current" identifier for the content in
- * the GtkTreeView.  Update the model.
+ * The selection in the identifier tree view changed.
+ * Update copy text into identifier entry.
  *
- * @param renderer pseudonym renderer that notified us about the edit
- * @param cpath where the edit happened
- * @param new_text the new value
-  * @param user_data master publishing dialog context of our window
+ * @param ts the changed selection
+ * @param user_data master publishing dialog context of our window
  */
-void
-GNUNET_GTK_master_publish_dialog_pseudonym_identifier_renderer_edited_cb 
(GtkCellRendererText * renderer, 
-                                                                         gchar 
* cpath, 
-                                                                         gchar 
* new_text,
-                                                                         
gpointer user_data)
+static void
+identifiers_selection_changed_cb (GtkTreeSelection *ts, gpointer user_data)
 {
   struct MainPublishingDialogContext *ctx = user_data;
   GtkTreeIter iter;
+  gchar *new_text;
+  gchar *spath;
+  GtkTreePath *path;
 
-  if (! gtk_tree_model_get_iter_from_string (ctx->pseudonym_treemodel, &iter, 
cpath))
+  if (!gtk_tree_selection_get_selected (ts, NULL, &iter))
+    return;
+  gtk_tree_model_get (ctx->identifiers_treemodel, &iter,
+      IDENTIFIERS_MC_ID, &new_text,
+      IDENTIFIERS_MC_PATH_TO_ORIGINAL, &spath,
+      -1);
+  path = NULL;
+  if (spath)
+    path = gtk_tree_path_new_from_string (spath);
+  if (path)
   {
-    GNUNET_break (0);
-    return;
+    gtk_tree_selection_select_path (ts, path);
+    gtk_tree_path_free (path);
   }
-  gtk_tree_store_set (GTK_TREE_STORE (ctx->pseudonym_treemodel), &iter, 
-                      PSEUDONYM_MC_LAST_ID, new_text, 
-                      -1);
-  update_selectivity (ctx);
+  else if (new_text)
+    gtk_entry_set_text (GTK_ENTRY (ctx->identifier_entry), new_text);
+  g_free (new_text);
 }
 
 
@@ -999,7 +1078,8 @@
   }
 
   /* and now, depending on the selection, update the sensitivity of buttons */
-  update_selectivity (ctx);
+  update_selectivity_execute_cancel (ctx);
+  update_selectivity_edit (ctx);
 }
 
 
@@ -1026,7 +1106,8 @@
   GNUNET_CONTAINER_DLL_remove (adcc->ctx->adddir_head,
                               adcc->ctx->adddir_tail, 
                               adcc);
-  update_selectivity (adcc->ctx);
+  update_selectivity_execute_cancel (adcc->ctx);
+  update_selectivity_edit (adcc->ctx);
   GNUNET_free (adcc);
 }
 
@@ -1334,7 +1415,6 @@
                                    directory_scan_result,
                                    NULL);
       GNUNET_FS_share_tree_free (directory_scan_result);
-      update_selectivity (adcc->ctx);
       destroy_progress_dialog (adcc);
     }
     break;
@@ -1393,7 +1473,7 @@
                                             &directory_scan_cb, adcc);
 
   /* disables 'cancel' button of the master dialog */
-  update_selectivity (ctx);
+  update_selectivity_execute_cancel (ctx);
 }
 
 
@@ -1776,38 +1856,6 @@
 
 
 /**
- * (Recursively) clean up the tree store with the pseudonyms.
- *
- * @param tm tree model we are cleaning up
- * @param iter current position to clean up
- */
-static void
-free_pseudonym_tree_store (GtkTreeModel * tm, GtkTreeIter * iter)
-{
-  GtkTreeIter child;
-  struct GNUNET_CONTAINER_MetaData *meta;
-  struct GNUNET_FS_Namespace *ns;
-
-  gtk_tree_model_get (tm, iter, 
-                      PSEUDONYM_MC_NAMESPACE_HANDLE, &ns, 
-                      PSEUDONYM_MC_LAST_META, &meta, 
-                      -1);
-  if (NULL != meta)
-    GNUNET_CONTAINER_meta_data_destroy (meta);
-  if (NULL != ns)
-    GNUNET_FS_namespace_delete (ns, GNUNET_NO); 
-  /* recursively clean up children */
-  if (! gtk_tree_model_iter_children (tm, &child, iter))
-    return;
-  do
-  {
-    free_pseudonym_tree_store (tm, &child);
-  }
-  while (gtk_tree_model_iter_next (tm, &child));  
-}
-
-
-/**
  * Recursively clean up the tree store with the file information in it.
  *
  * @param tm tree model we are cleaning up
@@ -1851,16 +1899,10 @@
   if (NULL != ctx->adddir_head)
     return GNUNET_NO;
 
-  /* free state from 'ptm' */
-  if (gtk_tree_model_get_iter_first (ctx->pseudonym_treemodel, &iter))
-    do
-    {
-      free_pseudonym_tree_store (ctx->pseudonym_treemodel, &iter);
-    }
-    while (gtk_tree_model_iter_next (ctx->pseudonym_treemodel, &iter));
-  gtk_tree_store_clear (GTK_TREE_STORE (ctx->pseudonym_treemodel));
+  /* free state from the identifiers treemodel */
+  gtk_tree_store_clear (GTK_TREE_STORE (ctx->identifiers_treemodel));
 
-  /* free state from 'tm' */
+  /* free state from the file info treemodel */
   if (gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &iter))
     do
     {
@@ -1871,6 +1913,10 @@
 
   gtk_widget_destroy (GTK_WIDGET (ctx->master_pubdialog));
   g_object_unref (G_OBJECT (ctx->builder));
+  GNUNET_free_non_null (ctx->ns_name);
+  if (ctx->ns)
+    GNUNET_FS_namespace_delete (ctx->ns, GNUNET_NO);
+  g_free (ctx->previous_id);
   GNUNET_free (ctx);
   return GNUNET_YES;
 }
@@ -1888,44 +1934,76 @@
                                                             gpointer user_data)
 {
   struct MainPublishingDialogContext *ctx = user_data;
-  gpointer namespace;
   gchar *namespace_id;
-  gchar *namespace_uid;
+  struct GNUNET_FS_Namespace *ns;
+  const gchar *namespace_uid;
   struct GNUNET_FS_FileInformation *fi;
   GtkTreeIter iter;
+  gboolean do_global;
+  gboolean do_updateable;
+  gboolean do_own;
 
   if (NULL != ctx->adddir_head)
   {
     GNUNET_break (0);
     return;
   }
-  if (TRUE == gtk_tree_selection_get_selected (ctx->pseudonym_selection, NULL, 
&iter))
+
+  do_global = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(ctx->global_checkbox));
+  do_updateable = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(ctx->updateable_checkbox));
+  do_own = gtk_toggle_button_get_active (GTK_TOGGLE_BUTTON 
(ctx->own_checkbox));
+  ns = NULL;
+  namespace_id = NULL;
+  namespace_uid = NULL;
+  if (ctx->ns && do_own)
   {
-    gtk_tree_model_get (ctx->pseudonym_treemodel, &iter,
-                        PSEUDONYM_MC_NAMESPACE_HANDLE, &namespace,
-                        PSEUDONYM_MC_LAST_ID, &namespace_id,
-                        PSEUDONYM_MC_NEXT_ID, &namespace_uid,
-                        -1);
+    const gchar *id_entry_text;
+    if (NULL != (id_entry_text = gtk_entry_get_text (GTK_ENTRY 
(ctx->identifier_entry))))
+      namespace_id = g_strdup (id_entry_text);
+    else if (!do_global)
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Global publication is disabled, 
but namespace_id is not available\n");
+    if ((NULL != namespace_id) && ('\0' == namespace_id[0]))
+    {
+      g_free (namespace_id);
+      namespace_id = NULL;
+    }
+    if (NULL != namespace_id)
+    {
+      namespace_uid = gtk_entry_get_text (GTK_ENTRY (ctx->update_id_entry));
+      if ((NULL == namespace_uid) || ('\0' == namespace_uid[0]) || 
(!do_updateable))
+        namespace_uid = NULL;
+      ns = ctx->ns;
+    }
+    else if (!do_global)
+      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Global publication is disabled, 
but namespace_id unavailable or zero-length\n");
   }
-  else
+  else if (!do_global)
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Global publication is disabled, ns 
is either NULL or disabled, yet 'Execute' was pressed\n");
+  if ((!do_global) && (NULL == ns))
   {
-    namespace = NULL;
-    namespace_id = NULL;
-    namespace_uid = NULL;
+    g_free (namespace_id);
+    gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctx->own_checkbox), 
FALSE);
+    return;
   }
   if (gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &iter))
+  {
+    clear_keywords_from_tm (ctx);
     do
     {
       fi = get_file_information (ctx->file_info_treemodel, &iter);
       /* FIXME-FEATURE-BUG-MINOR: should we convert namespace id and uid from 
UTF8? */
       GNUNET_FS_publish_start (GNUNET_FS_GTK_get_fs_handle (), 
-                              fi, namespace,
+                              fi, ns,
                               namespace_id, namespace_uid,
                               GNUNET_FS_PUBLISH_OPTION_NONE);
     }
     while (gtk_tree_model_iter_next (ctx->file_info_treemodel, &iter));
+  }
+  else
+  {
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Failed to get firet item in files 
tree view. Is it empty?\n");
+  }
   g_free (namespace_id);
-  g_free (namespace_uid);  
   GNUNET_break (GNUNET_YES == close_master_publish_dialog (ctx));
 }
 
@@ -1992,7 +2070,20 @@
   }
 }
 
+static void
+clear_keywords_from_tm (struct MainPublishingDialogContext *ctx)
+{
+  GtkTreeIter iter;
 
+  /* clear keywords from 'tm' */
+  if (gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &iter))
+    do
+    {
+      clear_keywords_from_file_information_in_tree_store 
(ctx->file_info_treemodel, &iter);
+    }
+    while (gtk_tree_model_iter_next (ctx->file_info_treemodel, &iter));
+}
+
 /**
  * The user pushed the 'clear' button.  Remove all keywords.
  *
@@ -2003,16 +2094,7 @@
 GNUNET_GTK_master_publish_dialog_clear_button_clicked_cb (GtkButton * button,
                                                          gpointer user_data)
 {
-  struct MainPublishingDialogContext *ctx = user_data;
-  GtkTreeIter iter;
-
-  /* clear keywords from 'tm' */
-  if (gtk_tree_model_get_iter_first (ctx->file_info_treemodel, &iter))
-    do
-    {
-      clear_keywords_from_file_information_in_tree_store 
(ctx->file_info_treemodel, &iter);
-    }
-    while (gtk_tree_model_iter_next (ctx->file_info_treemodel, &iter));
+  clear_keywords_from_tm (user_data);
 }
 
 
@@ -2054,8 +2136,32 @@
   return FALSE;
 }
 
+static void
+expander_callback (GObject    *object,
+                   GParamSpec *param_spec,
+                   gpointer    user_data)
+{
+  GtkExpander *expander;
+  struct MainPublishingDialogContext *ctx = user_data;
+  GtkAllocation scrolled_allocation;
+  gint paned_pos;
+  GValue gv = G_VALUE_INIT;
+  gboolean expanded;
+  expander = GTK_EXPANDER (object);
 
+  gtk_widget_get_allocation (GTK_WIDGET (ctx->identifiers_scrolled),
+      &scrolled_allocation);
+  expanded = gtk_expander_get_expanded (expander);
+  gtk_widget_set_visible (GTK_WIDGET (ctx->identifiers_scrolled), expanded);
 
+  g_value_init (&gv, G_TYPE_BOOLEAN);
+  g_value_set_boolean (&gv, expanded);
+  gtk_container_child_set_property (GTK_CONTAINER (ctx->vpaned), 
ctx->bottom_frame, "resize", &gv);
+  paned_pos = gtk_paned_get_position (GTK_PANED (ctx->vpaned));
+  paned_pos = paned_pos + (scrolled_allocation.height * (expanded ? -1 : 1));
+  gtk_paned_set_position (GTK_PANED (ctx->vpaned), paned_pos);
+}
+
 /* ******************** master edit dialog initialization 
*********************** */
 
 
@@ -2075,11 +2181,6 @@
   GtkTreeStore *ts;
 
   /**
-   * Name of the namespace.
-   */
-  const char *namespace_name;
-
-  /**
    * Handle to the namespace.
    */
   struct GNUNET_FS_Namespace *ns;
@@ -2118,38 +2219,114 @@
   char *desc;
   int desc_is_a_dup;
   struct GNUNET_HashCode hc;
+  gchar *displaytext;
+  gchar *hashbuf;
+  char *mdbuf;
+  ssize_t hashbufsize;
+  ssize_t mdsize;
+  ssize_t next_id_len;
+  char *uristring;
+  ssize_t urilen;
+  ssize_t last_id_len;
+  gchar *spath;
 
   uc->update_called = GNUNET_YES;
-  GNUNET_CRYPTO_hash (last_id, strlen (last_id), &hc);
-  if (NULL != GNUNET_CONTAINER_multihashmap_get (uc->seen, &hc))
+
+  if (next_id)
+    next_id_len = strlen (next_id);
+  else
+    next_id_len = 0;
+
+  if (last_id)
+    last_id_len = strlen (last_id);
+  else
+    last_id_len = 0;
+
+  uristring = GNUNET_FS_uri_to_string (last_uri);
+  if (uristring)
+    urilen = strlen (uristring);
+  else
+    urilen = 0;
+
+  mdbuf = NULL;
+  mdsize = GNUNET_CONTAINER_meta_data_serialize (last_meta, &mdbuf, 64*1024, 
GNUNET_CONTAINER_META_DATA_SERIALIZE_FULL);
+  if (0 > mdsize)
+    mdsize = 0;
+
+  hashbufsize = last_id_len + next_id_len + urilen + mdsize;
+  hashbuf = GNUNET_malloc (hashbufsize);
+  if (last_id)
+    strcpy (&hashbuf[0], last_id);
+  if (next_id)
+    strcpy (&hashbuf[last_id_len], next_id);
+  if (uristring)
+    strcpy (&hashbuf[last_id_len + next_id_len], uristring);
+  if (mdbuf)
+    memcpy (&hashbuf[last_id_len + next_id_len + urilen], mdbuf, mdsize);
+
+  GNUNET_CRYPTO_hash (hashbuf, hashbufsize, &hc);
+
+  GNUNET_free (uristring);
+  GNUNET_free_non_null (mdbuf);
+  GNUNET_free (hashbuf);
+
+  spath = NULL;
+  spath = GNUNET_CONTAINER_multihashmap_get (uc->seen, &hc);
+
+  desc = GNUNET_FS_GTK_get_description_from_metadata (last_meta, 
&desc_is_a_dup);
+  if (NULL != spath)
+  {
+    displaytext = g_strdup_printf ("<i>%s</i>", last_id);
+    gtk_tree_store_insert_with_values (uc->ts, &iter, uc->parent, G_MAXINT,
+        IDENTIFIERS_MC_ID, last_id,
+        IDENTIFIERS_MC_UPDATE_ID, next_id,
+        IDENTIFIERS_MC_DESCRIPTION, desc,
+        IDENTIFIERS_MC_PATH_TO_ORIGINAL, spath,
+        IDENTIFIERS_MC_ID_MARKED_UP, displaytext,
+        -1);
+  }
+  else if (NULL == uc->parent)
+  {
+    displaytext = g_strdup_printf ("%s", last_id);
+    gtk_tree_store_insert_with_values (uc->ts, &iter, uc->parent, G_MAXINT,
+        IDENTIFIERS_MC_ID, last_id,
+        IDENTIFIERS_MC_UPDATE_ID, next_id,
+        IDENTIFIERS_MC_DESCRIPTION, desc,
+        IDENTIFIERS_MC_PATH_TO_ORIGINAL, NULL,
+        IDENTIFIERS_MC_ID_MARKED_UP, displaytext,
+        -1);
+  }
+  else
+  {
+    displaytext = g_strdup_printf ("%s", last_id);
+    gtk_tree_store_insert_with_values (uc->ts, &iter, uc->parent, G_MAXINT,
+        IDENTIFIERS_MC_ID, last_id,
+        IDENTIFIERS_MC_UPDATE_ID, next_id,
+        IDENTIFIERS_MC_DESCRIPTION, desc,
+        IDENTIFIERS_MC_PATH_TO_ORIGINAL, NULL,
+        IDENTIFIERS_MC_ID_MARKED_UP, displaytext,
+        -1);
+  }
+  g_free (displaytext);
+
+  if (NULL == spath)
+  {
+    GtkTreePath *path;
+    char *gspath;
+    path = gtk_tree_model_get_path (GTK_TREE_MODEL (uc->ts), &iter);
+    spath = gtk_tree_path_to_string (path);
+    gtk_tree_path_free (path);
+    /* for the sake of consistency, only put GNUNET_free'able things into the 
map */
+    gspath = GNUNET_strdup (spath);
+    if (GNUNET_SYSERR == GNUNET_CONTAINER_multihashmap_put (uc->seen, &hc, 
gspath,
+            GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST))
+      GNUNET_free (gspath);
+  }
+  else
     return;
-  GNUNET_CONTAINER_multihashmap_put (uc->seen, &hc, "dummy",
-                                     
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_FAST);
-  /* FIXME-BUG-MAYBE: what if this put fails?  Not convinced it cannot... */
-  desc = GNUNET_FS_GTK_get_description_from_metadata (last_meta, 
&desc_is_a_dup);
-  gtk_tree_store_insert_with_values (uc->ts, &iter, uc->parent, G_MAXINT,
-                                     PSEUDONYM_MC_LOCAL_NAME,
-                                     uc->namespace_name,
-                                     PSEUDONYM_MC_NAMESPACE_HANDLE,
-                                     GNUNET_FS_namespace_dup (uc->ns),
-                                     PSEUDONYM_MC_LAST_ID, last_id,
-                                     PSEUDONYM_MC_LAST_URI,
-                                     GNUNET_FS_uri_dup (last_uri),
-                                     PSEUDONYM_MC_LAST_META,
-                                     GNUNET_CONTAINER_meta_data_duplicate
-                                     (last_meta),
-                                     PSEUDONYM_MC_NEXT_ID, "",
-                                     PSEUDONYM_MC_LAST_DESCRIPTION_FROM_META,
-                                     desc,
-                                     PSEUDONYM_MC_NEXT_ID_EDITABLE,
-                                     TRUE /* update editable (always) */ ,
-                                     PSEUDONYM_MC_CURRENT_ID_EDITABLE, FALSE
-                                     /* current not editable (only for 
top-level) */
-                                     , -1);
-  GNUNET_free_non_null (desc);
+
   sc.parent = &iter;
   sc.ts = uc->ts;
-  sc.namespace_name = uc->namespace_name;
   sc.ns = uc->ns;
   sc.seen = uc->seen;
   sc.update_called = GNUNET_NO;
@@ -2159,27 +2336,26 @@
       (strlen (next_id) > 0))
   {
     /* add leaf */
+    displaytext = g_strdup_printf ("<b>%s</b>", next_id);
     gtk_tree_store_insert_with_values (uc->ts, &titer, &iter, G_MAXINT,
-                                       PSEUDONYM_MC_LOCAL_NAME,
-                                       uc->namespace_name,
-                                       PSEUDONYM_MC_NAMESPACE_HANDLE,
-                                       GNUNET_FS_namespace_dup (uc->ns),
-                                       PSEUDONYM_MC_LAST_ID, next_id,
-                                       PSEUDONYM_MC_LAST_URI, NULL,
-                                       PSEUDONYM_MC_LAST_META, NULL,
-                                       PSEUDONYM_MC_NEXT_ID, "",
-                                       PSEUDONYM_MC_LAST_DESCRIPTION_FROM_META,
-                                       "",
-                                       PSEUDONYM_MC_NEXT_ID_EDITABLE,
-                                       TRUE /* update editable (always) */ ,
-                                       PSEUDONYM_MC_CURRENT_ID_EDITABLE,
-                                       FALSE
-                                       /* current not editable (only for 
top-level) */
-                                       , -1);
+        IDENTIFIERS_MC_ID, next_id,
+        IDENTIFIERS_MC_UPDATE_ID, NULL,
+        IDENTIFIERS_MC_DESCRIPTION, NULL,
+        IDENTIFIERS_MC_PATH_TO_ORIGINAL, NULL,
+        IDENTIFIERS_MC_ID_MARKED_UP, displaytext,
+        -1);
+    g_free (displaytext);
   }
 }
 
 
+static int
+free_seen_paths (void *cls, const struct GNUNET_HashCode * key, void *value)
+{
+  GNUNET_free_non_null (value);
+  return GNUNET_YES;
+}
+
 /**
  * Add all updateable entries of the current namespace to the
  * tree store.
@@ -2189,36 +2365,17 @@
  * @param id identity of the namespace to add
  */
 static void
-add_namespace_to_ts (void *cls, const char *name, const struct GNUNET_HashCode 
* id)
+add_namespace_to_ts (GtkTreeStore *ts, struct GNUNET_FS_Namespace *ns)
 {
-  GtkTreeStore *ts = cls;
   struct UpdateableContext uc;
-  GtkTreeIter iter;
 
-  uc.parent = &iter;
-  uc.namespace_name = name;
+  uc.parent = NULL;
   uc.ts = ts;
-  uc.ns = GNUNET_FS_namespace_create (GNUNET_FS_GTK_get_fs_handle (), name);
+  uc.ns = ns;
   uc.update_called = GNUNET_NO;
-  if (NULL == uc.ns)
-  {
-    GNUNET_break (0);
-    return;
-  }
-  gtk_tree_store_insert_with_values (ts, &iter, NULL, G_MAXINT, 
-                                     PSEUDONYM_MC_LOCAL_NAME, name,
-                                     PSEUDONYM_MC_NAMESPACE_HANDLE, uc.ns,
-                                     PSEUDONYM_MC_LAST_ID, NULL,
-                                     PSEUDONYM_MC_LAST_URI, NULL,
-                                     PSEUDONYM_MC_LAST_META, NULL,
-                                     PSEUDONYM_MC_NEXT_ID, NULL,
-                                     PSEUDONYM_MC_LAST_DESCRIPTION_FROM_META,
-                                     NULL,
-                                     PSEUDONYM_MC_NEXT_ID_EDITABLE, TRUE,
-                                     PSEUDONYM_MC_CURRENT_ID_EDITABLE, TRUE,
-                                     -1);
   uc.seen = GNUNET_CONTAINER_multihashmap_create (128, GNUNET_NO);
   GNUNET_FS_namespace_list_updateable (uc.ns, NULL, &add_updateable_to_ts, 
&uc);
+  GNUNET_CONTAINER_multihashmap_iterate (uc.seen, free_seen_paths, NULL);
   GNUNET_CONTAINER_multihashmap_destroy (uc.seen);
 }
 
@@ -2234,7 +2391,12 @@
 GNUNET_GTK_main_menu_file_publish_activate_cb (GtkWidget * dummy, gpointer 
user_data)
 {
   struct MainPublishingDialogContext *ctx;
-  GtkTreeView *pseudonym_treeview;
+/*  GtkTreeView *pseudonym_treeview;*/
+  const struct GNUNET_CONFIGURATION_Handle *cfg;
+  gboolean have_ns;
+  int updateable_enabled;
+  int own_enabled;
+  int global_enabled;
 
   ctx = GNUNET_malloc (sizeof (struct MainPublishingDialogContext));
   ctx->builder = GNUNET_GTK_get_new_builder 
("gnunet_fs_gtk_publish_dialog.glade", ctx);
@@ -2269,23 +2431,106 @@
   ctx->master_pubdialog =
       GTK_WINDOW (gtk_builder_get_object
                   (ctx->builder, "GNUNET_GTK_master_publish_dialog"));
-  pseudonym_treeview = GTK_TREE_VIEW (gtk_builder_get_object
-                                     (ctx->builder, 
-                                      
"GNUNET_GTK_master_publish_dialog_pseudonym_tree_view"));
-  ctx->pseudonym_selection = gtk_tree_view_get_selection (pseudonym_treeview);
-  ctx->pseudonym_treemodel = gtk_tree_view_get_model (pseudonym_treeview);
 
+  ctx->global_checkbox = GTK_WIDGET (gtk_builder_get_object
+      (ctx->builder , "GNUNET_GTK_master_publish_dialog_global_checkbox"));
+  ctx->own_checkbox = GTK_WIDGET (gtk_builder_get_object
+      (ctx->builder , "GNUNET_GTK_master_publish_dialog_own_checkbox"));
+  ctx->own_label = GTK_WIDGET (gtk_builder_get_object
+      (ctx->builder , "GNUNET_GTK_master_publish_dialog_own_label"));
+  ctx->updateable_checkbox = GTK_WIDGET (gtk_builder_get_object
+      (ctx->builder , "GNUNET_GTK_master_publish_dialog_updateable_checkbox"));
+  ctx->update_id_entry = GTK_WIDGET (gtk_builder_get_object
+      (ctx->builder , "GNUNET_GTK_master_publish_dialog_update_id_entry"));
+
+  ctx->own_vbox = GTK_WIDGET (gtk_builder_get_object
+      (ctx->builder , "GNUNET_GTK_master_publish_dialog_own_vbox"));
+  ctx->update_id_hbox = GTK_WIDGET (gtk_builder_get_object
+      (ctx->builder , "GNUNET_GTK_master_publish_dialog_update_id_hbox"));
+
+  ctx->identifiers_expander = GTK_WIDGET (gtk_builder_get_object 
(ctx->builder, 
"GNUNET_GTK_master_publish_dialog_previous_identifiers_expander"));
+  ctx->vpaned = GTK_WIDGET (gtk_builder_get_object (ctx->builder, 
"GNUNET_GTK_master_publish_dialog_vpaned"));
+  ctx->bottom_frame = GTK_WIDGET (gtk_builder_get_object (ctx->builder, 
"GNUNET_GTK_master_publish_dialog_bottom_frame"));
+
+  ctx->identifier_entry = GTK_WIDGET (gtk_builder_get_object
+      (ctx->builder , "GNUNET_GTK_master_publish_dialog_identifier_entry"));
+  ctx->identifiers_scrolled = GTK_WIDGET (gtk_builder_get_object 
(ctx->builder, 
"GNUNET_GTK_master_publish_dialog_previous_identifiers_scrolled"));
+  ctx->identifiers_treeview = GTK_TREE_VIEW (gtk_builder_get_object 
(ctx->builder, 
"GNUNET_GTK_master_publish_dialog_previous_identifiers_treeview"));
+  ctx->identifiers_treemodel = gtk_tree_view_get_model 
(ctx->identifiers_treeview);
+  ctx->identifiers_selection = gtk_tree_view_get_selection 
(ctx->identifiers_treeview);
+
+  g_signal_connect (ctx->identifiers_expander, "notify::expanded", G_CALLBACK 
(expander_callback), ctx);
+
   /* connect signals; FIXME-GTK3: these could be connected with (modern) Glade 
*/
   g_signal_connect (G_OBJECT (ctx->file_info_selection), "changed",
                     G_CALLBACK (selection_changed_cb), ctx);
-  g_signal_connect (G_OBJECT (ctx->pseudonym_selection), "changed",
-                    G_CALLBACK (selection_changed_cb), ctx);
+  g_signal_connect (G_OBJECT (ctx->identifiers_selection), "changed",
+                    G_CALLBACK (identifiers_selection_changed_cb), ctx);
 
-  /* populate namespace model */
-  GNUNET_FS_namespace_list (GNUNET_FS_GTK_get_fs_handle (),
-                            &add_namespace_to_ts,
-                           GTK_TREE_STORE (ctx->pseudonym_treemodel));
+  cfg = GNUNET_FS_GTK_get_configuration ();
+  if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (cfg,
+      "gnunet-fs-gtk", "DEFAULT_NAMESPACE", &ctx->ns_name))
+    ctx->ns_name = NULL;
+  else
+  {
+    ctx->ns = GNUNET_FS_namespace_open_existing (GNUNET_FS_GTK_get_fs_handle 
(), ctx->ns_name);
+    if (NULL == ctx->ns)
+      GNUNET_free (ctx->ns_name);
+  }
 
+  have_ns = (NULL != ctx->ns);
+
+  gtk_widget_set_sensitive (ctx->own_checkbox, have_ns);
+  gtk_widget_set_sensitive (ctx->identifier_entry, have_ns);
+  gtk_widget_set_sensitive (ctx->updateable_checkbox, have_ns);
+  gtk_widget_set_sensitive (ctx->update_id_entry, have_ns);
+  if (ctx->ns)
+  {
+    gtk_label_set_text (GTK_LABEL (ctx->own_label), ctx->ns_name);
+    gtk_widget_set_tooltip_text (ctx->own_label, _(
+        "This is the label of your namespace that will be used for "
+        "publication, if you enable that option.\n"
+        "This label will not be part of the publication.\n"
+        "If you don't like this label, use Namespace Organizer to change it."
+        ));
+    add_namespace_to_ts (GTK_TREE_STORE (ctx->identifiers_treemodel), ctx->ns);
+    gtk_tree_view_expand_all (ctx->identifiers_treeview);
+  }
+  else
+  {
+    gtk_label_set_text (GTK_LABEL (ctx->own_label),
+        _("<no namespace is selected>"));
+    gtk_widget_set_tooltip_text (ctx->own_label, _(
+        "Namespace publication is unavailable, no namespace is selected.\n"
+        "Try to close this dialog, open Namespace Organizer dialog, and "
+        "select a namespace from a list of namespaces you own.\n"
+        "You may need to create one, if you don't have any."
+        ));
+  }
+
+  updateable_enabled = GNUNET_CONFIGURATION_get_value_yesno (cfg,
+      "gnunet-gtk", "MAKE_UPDATEABLE_PUBLICATIONS_BY_DEFAULT");
+  if (GNUNET_SYSERR)
+    updateable_enabled = GNUNET_YES;
+  own_enabled = GNUNET_CONFIGURATION_get_value_yesno (cfg,
+      "gnunet-gtk", "MAKE_NAMESPACE_PUBLICATIONS_BY_DEFAULT");
+  if (GNUNET_SYSERR)
+    own_enabled = GNUNET_NO;
+  global_enabled = GNUNET_CONFIGURATION_get_value_yesno (cfg,
+      "gnunet-gtk", "MAKE_GLOBAL_PUBLICATIONS_BY_DEFAULT");
+  if (GNUNET_SYSERR)
+    global_enabled = GNUNET_YES;
+
+  /* This will emit appropriate signals, their handlers will hide
+   * parts of the dialog as needed.
+   */
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctx->updateable_checkbox),
+      GNUNET_YES == updateable_enabled);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctx->own_checkbox),
+      GNUNET_YES == own_enabled);
+  gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ctx->global_checkbox),
+      GNUNET_YES == global_enabled);
+
   /* show dialog */
   gtk_window_present (GTK_WINDOW (ctx->master_pubdialog));
 }




reply via email to

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