diff options
author | Martin Schanzenbach <schanzen@gnunet.org> | 2022-12-06 19:04:52 +0900 |
---|---|---|
committer | Martin Schanzenbach <schanzen@gnunet.org> | 2022-12-06 19:04:52 +0900 |
commit | 8c33bdfad715cfa614b6ecbdf0a8b87389430cc8 (patch) | |
tree | b4e6d0161b6c255f9dc357eb0a6f038d38d60fe3 | |
parent | 1c7666a87fb2d626145ebc34ba7110afa1089b58 (diff) |
Fix #7419
-rw-r--r-- | contrib/gnunet_fs_gtk_main_window.glade | 1467 | ||||
-rw-r--r-- | src/fs/gnunet-fs-gtk.c | 262 | ||||
-rw-r--r-- | src/namestore/gnunet-namestore-gtk.c | 1 |
3 files changed, 975 insertions, 755 deletions
diff --git a/contrib/gnunet_fs_gtk_main_window.glade b/contrib/gnunet_fs_gtk_main_window.glade index 1d7e0283..aaf24431 100644 --- a/contrib/gnunet_fs_gtk_main_window.glade +++ b/contrib/gnunet_fs_gtk_main_window.glade @@ -110,6 +110,14 @@ <column type="gpointer"/> </columns> </object> + <object class="GtkListStore" id="id_liststore"> + <columns> + <!-- column-name ego_name --> + <column type="gchararray"/> + <!-- column-name ego --> + <column type="gpointer"/> + </columns> + </object> <object class="GtkAdjustment" id="adjustment1"> <property name="upper">100</property> <property name="step_increment">1</property> @@ -668,7 +676,7 @@ <property name="can_focus">False</property> <property name="border_width">3</property> <property name="spacing">4</property> - <child> + <child> <object class="GtkBox" id="main_window_namespace_vbox"> <property name="visible">True</property> <property name="can_focus">False</property> @@ -723,7 +731,7 @@ <property name="can_focus">True</property> <property name="receives_default">True</property> <property name="tooltip_text" translatable="yes">Remember the specified namespace for later. -This operation will be executed using the anonymity level specified on the right.</property> + This operation will be executed using the anonymity level specified on the right.</property> <property name="use_stock">True</property> <property name="image_position">top</property> <signal name="clicked" handler="GNUNET_FS_GTK_save_button_clicked_cb" swapped="no"/> @@ -735,15 +743,15 @@ This operation will be executed using the anonymity level specified on the right </packing> </child> <child> - <object class="GtkBox" id="main_window_keywords_vbox"> + <object class="GtkBox" id="main_window_id_vbox"> <property name="visible">True</property> <property name="can_focus">False</property> <property name="orientation">vertical</property> <child> - <object class="GtkLabel" id="GNUNET_FS_GTK_keyword_label"> + <object class="GtkLabel" id="main_window_id_label"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="label" translatable="yes">Keywords:</property> + <property name="label" translatable="yes">Identity:</property> </object> <packing> <property name="expand">False</property> @@ -752,119 +760,50 @@ This operation will be executed using the anonymity level specified on the right </packing> </child> <child> - <object class="GtkEntry" id="main_window_search_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> - <property name="primary_icon_activatable">False</property> - <property name="secondary_icon_activatable">False</property> - <signal name="key-press-event" handler="main_window_search_entry_key_press_event_cb" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="main_window_search_button_alignment"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="yscale">0</property> - <child> - <object class="GtkButton" id="main_window_search_button"> - <property name="label" translatable="yes">Search</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <property name="tooltip_text" translatable="yes">Search using the given keywords. The search may be narrowed by the given mime type and/or restricted to a namespace. -This operation will be executed using the anonymity level specified on the right. -</property> - <property name="image">find_stock_image</property> - <property name="image_position">top</property> - <signal name="clicked" handler="main_window_search_button_clicked_cb" swapped="no"/> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> - </packing> - </child> - <child> - <object class="GtkBox" id="main_window_anonymity_vbox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkLabel" id="main_window_search_anonymity_label"> + <object class="GtkComboBox" id="gnunet_fs_gtk_id_combobox"> <property name="visible">True</property> + <property name="sensitive">False</property> <property name="can_focus">False</property> - <property name="label" translatable="yes">Anonymity:</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="main_window_search_anonymity_combobox_alignment"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="yscale">0</property> + <property name="model">id_liststore</property> + <!--<property name="has_entry">True</property>--> + <property name="entry_text_column">0</property> + <signal name="changed" handler="gnunet_fs_gtk_id_combobox_changed_cb" swapped="no"/> <child> - <object class="GtkComboBox" id="main_window_search_anonymity_combobox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="model">anonymity_level_liststore</property> - <property name="active">1</property> - <child> - <object class="GtkCellRendererText" id="main_window_search_anonymity_combobox_renderer"/> - <attributes> - <attribute name="foreground">2</attribute> - <attribute name="text">0</attribute> - </attributes> - </child> - <child> - <object class="GtkCellRendererText" id="main_window_search_anonymity_combobox_renerer_level"/> - <attributes> - <attribute name="text">1</attribute> - </attributes> - </child> - </object> + <object class="GtkCellRendererText" id="main_window_fs_id_combobox_renderer"/> + <attributes> + <attribute name="text">0</attribute> + </attributes> </child> + <!--<child internal-child="entry"> + <object class="GtkEntry" id="gnunet_fs_gtk_id_entry"> + <property name="can_focus">True</property> + </object> + </child>--> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="padding">5</property> <property name="position">1</property> </packing> </child> </object> <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">4</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> </packing> </child> <child> - <object class="GtkBox" id="main_window_mime_vbox"> + <object class="GtkBox" id="main_window_keywords_vbox"> <property name="visible">True</property> <property name="can_focus">False</property> + <property name="orientation">vertical</property> <child> - <object class="GtkLabel" id="main_window_search_mime_label"> + <object class="GtkLabel" id="GNUNET_FS_GTK_keyword_label"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="label" translatable="yes">Mime-type:</property> + <property name="label" translatable="yes">Keywords:</property> </object> <packing> <property name="expand">False</property> @@ -873,627 +812,749 @@ This operation will be executed using the anonymity level specified on the right </packing> </child> <child> - <object class="GtkAlignment" id="main_window_search_mime_combobox_alignment"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="yscale">0</property> - <child> - <object class="GtkComboBox" id="main_window_search_mime_combobox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="model">main_window_search_mime_liststore</property> - <property name="active">0</property> - <child> - <object class="GtkCellRendererText" id="main_window_search_mime_renderer_description"/> - <attributes> - <attribute name="text">1</attribute> - </attributes> - </child> - <child> - <object class="GtkCellRendererText" id="main_window_search_mime_renderer_type"> - <property name="visible">False</property> - </object> - <attributes> - <attribute name="text">0</attribute> - </attributes> - </child> - <child> - <object class="GtkCellRendererText" id="main_window_search_mime_renderer_extension"/> - <attributes> - <attribute name="text">2</attribute> - </attributes> - </child> - <child> - <object class="GtkCellRendererText" id="main_window_search_mime_renderer_lossyness"> - <property name="visible">False</property> - </object> - <attributes> - <attribute name="text">3</attribute> - </attributes> - </child> - <child> - <object class="GtkCellRendererText" id="main_window_search_mime_renderer_freedom"> - <property name="visible">False</property> - </object> - <attributes> - <attribute name="text">4</attribute> - </attributes> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">5</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkPaned" id="main_window_hpaned"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <child> - <object class="GtkBox" id="GNUNET_GTK_main_window_left_vbox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkNotebook" id="GNUNET_GTK_main_window_notebook"> + <object class="GtkEntry" id="main_window_search_entry"> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="scrollable">True</property> - <property name="enable_popup">True</property> - <signal name="switch-page" handler="GNUNET_GTK_main_window_notebook_switch_page_cb" after="yes" swapped="no"/> - <child> - <object class="GtkTreeView" id="GNUNET_GTK_download_frame"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="model">GNUNET_GTK_file_sharing_downloads_tree_store</property> - <property name="headers_clickable">False</property> - <property name="search_column">6</property> - <property name="enable_grid_lines">horizontal</property> - <property name="enable_tree_lines">True</property> - <signal name="button-press-event" handler="GNUNET_GTK_download_frame_button_press_event_cb" swapped="no"/> - <signal name="cursor-changed" handler="GNUNET_FS_GTK_download_frame_treeview_cursor_changed_cb" swapped="no"/> - <signal name="popup-menu" handler="GNUNET_FS_GTK_search_treeview_popup_menu" swapped="no"/> - <child internal-child="selection"> - <object class="GtkTreeSelection" id="GNUNET_GTK_download_treeview_selection"/> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_description_column"> - <property name="title">Description</property> - <property name="expand">True</property> - <property name="clickable">True</property> - <property name="reorderable">True</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">6</property> - <child> - <object class="GtkCellRendererText" id="GNUNET_GTK_download_description_renderer_text"/> - <attributes> - <attribute name="cell-background">8</attribute> - <attribute name="text">6</attribute> - </attributes> - </child> - <child> - <object class="GtkCellRendererPixbuf" id="GNUNET_GTK_download_description_renderer_pixbuf"> - <property name="xalign">1</property> - <property name="icon_name">gnunet-fs-gtk-ns-association</property> - </object> - <attributes> - <attribute name="visible">19</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_pixbuf_column"> - <property name="title" translatable="yes">Status</property> - <child> - <object class="GtkCellRendererPixbuf" id="GNUNET_GTK_download_status_cellrendererpixbuf"/> - <attributes> - <attribute name="cell-background">8</attribute> - <attribute name="pixbuf">17</attribute> - <attribute name="stock-id">8</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_availability_column"> - <property name="title">Availability</property> - <property name="clickable">True</property> - <property name="reorderable">True</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">5</property> - <child> - <object class="GtkCellRendererProgress" id="GNUNET_GTK_download_availability_renderer"/> - <attributes> - <attribute name="cell-background">8</attribute> - <attribute name="pulse">18</attribute> - <attribute name="value">5</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_mime_column"> - <property name="visible">False</property> - <property name="title">Format</property> - <property name="clickable">True</property> - <property name="reorderable">True</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">10</property> - <child> - <object class="GtkCellRendererText" id="GNUNET_GTK_download_mime_renderer"/> - <attributes> - <attribute name="cell-background">8</attribute> - <attribute name="text">10</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_completed_column"> - <property name="visible">False</property> - <property name="title">Completed (bytes)</property> - <property name="clickable">True</property> - <property name="reorderable">True</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">14</property> - <child> - <object class="GtkCellRendererText" id="GNUNET_GTK_download_completed_renderer"/> - <attributes> - <attribute name="cell-background">8</attribute> - <attribute name="text">14</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_size_column"> - <property name="title">Size</property> - <property name="clickable">True</property> - <property name="reorderable">True</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">2</property> - <child> - <object class="GtkCellRendererText" id="GNUNET_GTK_download_size_renderer"/> - <attributes> - <attribute name="cell-background">8</attribute> - <attribute name="text">2</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_progress_column"> - <property name="title">Progress</property> - <property name="clickable">True</property> - <property name="reorderable">True</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">4</property> - <child> - <object class="GtkCellRendererProgress" id="GNUNET_GTK_download_progress_renderer"/> - <attributes> - <attribute name="cell-background">8</attribute> - <attribute name="text">4</attribute> - <attribute name="value">4</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_applicability_column"> - <property name="visible">False</property> - <property name="title">#</property> - <property name="clickable">True</property> - <property name="reorderable">True</property> - <property name="sort_indicator">True</property> - <property name="sort_column_id">11</property> - <child> - <object class="GtkCellRendererText" id="GNUNET_GTK_download_applicability_renderer"/> - <attributes> - <attribute name="cell-background">8</attribute> - <attribute name="text">11</attribute> - </attributes> - </child> - </object> - </child> - </object> - </child> - <child type="tab"> - <object class="GtkBox" id="GNUNET_GTK_download_frame_hbox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkImage" id="GNUNET_GTK_main_window_notebook_download_image"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="stock">gtk-go-down</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="padding">5</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkButton" id="_search_result_label_clear_button"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <signal name="clicked" handler="GNUNET_FS_GTK_downloads_clear_button_clicked" swapped="no"/> - <child> - <object class="GtkImage" id="clear_icon_stock_image"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="stock">gtk-clear</property> - <property name="icon_size">2</property> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="padding">5</property> - <property name="position">1</property> - </packing> - </child> - </object> - <packing> - <property name="tab_fill">False</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="GtkBox" id="GNUNET_GTK_search_frame_download_vbox"> - <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkBox" id="GNUNET_GTK_search_frame_download_into_hbox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">4</property> - <child> - <object class="GtkLabel" id="GNUNET_GTK_search_frame_download_location_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Download into:</property> - <property name="single_line_mode">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkFileChooserButton" id="GNUNET_GTK_search_frame_download_location_chooser"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="action">select-folder</property> - <property name="title" translatable="yes">Select a directory to download into</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">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkBox" id="GNUNET_GTK_search_frame_download_filename_hbox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">4</property> - <child> - <object class="GtkLabel" id="GNUNET_GTK_search_frame_download_filename_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Download as:</property> - <property name="single_line_mode">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkEntry" id="GNUNET_GTK_search_frame_download_filename_entry"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="invisible_char">●</property> - <property name="primary_icon_activatable">False</property> - <property name="secondary_icon_activatable">False</property> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkButton" id="GNUNET_GTK_search_frame_download_filename_change_button"> - <property name="label">…</property> - <property name="height_request">1</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="focus_on_click">False</property> - <property name="receives_default">False</property> - <signal name="clicked" handler="GNUNET_GTK_search_frame_download_filename_change_button_clicked_cb" swapped="no"/> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="pack_type">end</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkBox" id="GNUNET_GTK_search_frame_download_misc_hbox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="spacing">4</property> - <child> - <object class="GtkLabel" id="GNUNET_GTK_search_frame_download_anonymity_label"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="label" translatable="yes">Anonymity:</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">0</property> - </packing> - </child> - <child> - <object class="GtkAlignment" id="main_window_download_anonymity_combobox_alignment"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="yscale">0</property> - <child> - <object class="GtkComboBox" id="main_window_download_anonymity_combobox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="model">anonymity_level_liststore</property> - <property name="active">1</property> - <child> - <object class="GtkCellRendererText" id="main_window_download_anonymity_combobox_renderer"/> - <attributes> - <attribute name="foreground">2</attribute> - <attribute name="text">0</attribute> - </attributes> - </child> - <child> - <object class="GtkCellRendererText" id="main_window_download_anonymity_combobox_renerer_level"/> - <attributes> - <attribute name="text">1</attribute> - </attributes> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">1</property> - </packing> - </child> - <child> - <object class="GtkCheckButton" id="GNUNET_GTK_search_frame_download_recursive_checkbox"> - <property name="label" translatable="yes">Recursive</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">False</property> - <property name="draw_indicator">True</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="pack_type">end</property> - <property name="position">2</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">2</property> - </packing> - </child> - <child> - <object class="GtkBox" id="GNUNET_GTK_search_frame_download_download_hbox"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <child> - <object class="GtkButton" id="GNUNET_GTK_search_frame_download_download_button"> - <property name="label" translatable="yes">Download!</property> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="receives_default">True</property> - <signal name="clicked" handler="GNUNET_GTK_search_frame_download_download_button_clicked_cb" swapped="no"/> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">0</property> - </packing> - </child> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="position">3</property> - </packing> - </child> + <property name="invisible_char">●</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + <signal name="key-press-event" handler="main_window_search_entry_key_press_event_cb" swapped="no"/> </object> <packing> <property name="expand">False</property> <property name="fill">False</property> + <property name="padding">5</property> <property name="position">1</property> </packing> </child> </object> <packing> - <property name="resize">False</property> - <property name="shrink">False</property> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">2</property> </packing> </child> <child> - <object class="GtkBox" id="GNUNET_GTK_main_window_extras_vbox"> + <object class="GtkAlignment" id="main_window_search_button_alignment"> <property name="visible">True</property> <property name="can_focus">False</property> - <property name="orientation">vertical</property> - <child> - <object class="GtkImage" id="GNUNET_GTK_main_window_preview_image"> - <property name="visible">True</property> - <property name="can_focus">False</property> - <property name="has_tooltip">True</property> - <property name="tooltip_text" translatable="yes">Thumbnail associated with the currently selected content</property> - <property name="pixel_size">256</property> - </object> - <packing> - <property name="expand">False</property> - <property name="fill">False</property> - <property name="padding">5</property> - <property name="position">0</property> - </packing> - </child> + <property name="yscale">0</property> <child> - <object class="GtkScrolledWindow" id="GNUNET_GTK_main_window_metadata_scroll"> + <object class="GtkButton" id="main_window_search_button"> + <property name="label" translatable="yes">Search</property> <property name="visible">True</property> <property name="can_focus">True</property> - <property name="tooltip_text" translatable="yes">File meta data</property> - <property name="hadjustment">adjustment1</property> - <property name="vadjustment">adjustment2</property> - <property name="shadow_type">in</property> - <child> - <object class="GtkTreeView" id="GNUNET_GTK_main_window_metadata_treeview"> - <property name="visible">True</property> - <property name="can_focus">True</property> - <property name="hadjustment">adjustment1</property> - <property name="vadjustment">adjustment2</property> - <property name="model">GNUNET_GTK_meta_data_list_store</property> - <property name="search_column">0</property> - <property name="rubber_banding">True</property> - <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-selection2"/> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_main_window_metadata_type_column"> - <property name="sizing">autosize</property> - <property name="title">Type</property> - <property name="clickable">True</property> - <property name="reorderable">True</property> - <property name="sort_indicator">True</property> - <child> - <object class="GtkCellRendererText" id="GNUNET_GTK_main_window_metadata_type_renderer"/> - <attributes> - <attribute name="text">2</attribute> - </attributes> - </child> - </object> - </child> - <child> - <object class="GtkTreeViewColumn" id="GNUNET_GTK_main_window_metadata_value_column"> - <property name="sizing">autosize</property> - <property name="title">Value</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_main_window_metadata_value_renderer"> - <property name="wrap_mode">word</property> - </object> - <attributes> - <attribute name="text">3</attribute> - </attributes> - </child> - </object> - </child> - </object> - </child> - </object> - <packing> - <property name="expand">True</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> - </object> - <packing> - <property name="expand">True</property> - <property name="fill">True</property> - <property name="position">3</property> - </packing> - </child> - </object> - </child> - </object> - <object class="GtkSizeGroup" id="GNUNET_FS_GTK_download_frame_vsize_group"> - <property name="mode">vertical</property> - <property name="ignore_hidden">True</property> - <widgets> - <widget name="GNUNET_GTK_search_frame_download_location_label"/> - <widget name="GNUNET_GTK_search_frame_download_filename_label"/> - <widget name="GNUNET_GTK_search_frame_download_anonymity_label"/> - <widget name="GNUNET_GTK_search_frame_download_location_chooser"/> - <widget name="GNUNET_GTK_search_frame_download_filename_entry"/> - <widget name="GNUNET_GTK_search_frame_download_filename_change_button"/> - <widget name="main_window_download_anonymity_combobox_alignment"/> - <widget name="GNUNET_GTK_search_frame_download_recursive_checkbox"/> - </widgets> - </object> - <object class="GtkSizeGroup" id="GNUNET_GTK_download_frame_labels_size_group"> - <widgets> - <widget name="GNUNET_GTK_search_frame_download_location_label"/> - <widget name="GNUNET_GTK_search_frame_download_anonymity_label"/> - <widget name="GNUNET_GTK_search_frame_download_filename_label"/> - </widgets> - </object> + <property name="receives_default">True</property> + <property name="tooltip_text" translatable="yes">Search using the given keywords. The search may be narrowed by the given mime type and/or restricted to a namespace. + This operation will be executed using the anonymity level specified on the right. + </property> + <property name="image">find_stock_image</property> + <property name="image_position">top</property> + <signal name="clicked" handler="main_window_search_button_clicked_cb" swapped="no"/> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + <child> + <object class="GtkBox" id="main_window_anonymity_vbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkLabel" id="main_window_search_anonymity_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Anonymity:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="main_window_search_anonymity_combobox_alignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="yscale">0</property> + <child> + <object class="GtkComboBox" id="main_window_search_anonymity_combobox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">anonymity_level_liststore</property> + <property name="active">1</property> + <child> + <object class="GtkCellRendererText" id="main_window_search_anonymity_combobox_renderer"/> + <attributes> + <attribute name="foreground">2</attribute> + <attribute name="text">0</attribute> + </attributes> + </child> + <child> + <object class="GtkCellRendererText" id="main_window_search_anonymity_combobox_renerer_level"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">4</property> + </packing> + </child> + <child> + <object class="GtkBox" id="main_window_mime_vbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkLabel" id="main_window_search_mime_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Mime-type:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="main_window_search_mime_combobox_alignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="yscale">0</property> + <child> + <object class="GtkComboBox" id="main_window_search_mime_combobox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">main_window_search_mime_liststore</property> + <property name="active">0</property> + <child> + <object class="GtkCellRendererText" id="main_window_search_mime_renderer_description"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + <child> + <object class="GtkCellRendererText" id="main_window_search_mime_renderer_type"> + <property name="visible">False</property> + </object> + <attributes> + <attribute name="text">0</attribute> + </attributes> + </child> + <child> + <object class="GtkCellRendererText" id="main_window_search_mime_renderer_extension"/> + <attributes> + <attribute name="text">2</attribute> + </attributes> + </child> + <child> + <object class="GtkCellRendererText" id="main_window_search_mime_renderer_lossyness"> + <property name="visible">False</property> + </object> + <attributes> + <attribute name="text">3</attribute> + </attributes> + </child> + <child> + <object class="GtkCellRendererText" id="main_window_search_mime_renderer_freedom"> + <property name="visible">False</property> + </object> + <attributes> + <attribute name="text">4</attribute> + </attributes> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">5</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkPaned" id="main_window_hpaned"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <child> + <object class="GtkBox" id="GNUNET_GTK_main_window_left_vbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkNotebook" id="GNUNET_GTK_main_window_notebook"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="scrollable">True</property> + <property name="enable_popup">True</property> + <signal name="switch-page" handler="GNUNET_GTK_main_window_notebook_switch_page_cb" after="yes" swapped="no"/> + <child> + <object class="GtkTreeView" id="GNUNET_GTK_download_frame"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="model">GNUNET_GTK_file_sharing_downloads_tree_store</property> + <property name="headers_clickable">False</property> + <property name="search_column">6</property> + <property name="enable_grid_lines">horizontal</property> + <property name="enable_tree_lines">True</property> + <signal name="button-press-event" handler="GNUNET_GTK_download_frame_button_press_event_cb" swapped="no"/> + <signal name="cursor-changed" handler="GNUNET_FS_GTK_download_frame_treeview_cursor_changed_cb" swapped="no"/> + <signal name="popup-menu" handler="GNUNET_FS_GTK_search_treeview_popup_menu" swapped="no"/> + <child internal-child="selection"> + <object class="GtkTreeSelection" id="GNUNET_GTK_download_treeview_selection"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_description_column"> + <property name="title">Description</property> + <property name="expand">True</property> + <property name="clickable">True</property> + <property name="reorderable">True</property> + <property name="sort_indicator">True</property> + <property name="sort_column_id">6</property> + <child> + <object class="GtkCellRendererText" id="GNUNET_GTK_download_description_renderer_text"/> + <attributes> + <attribute name="cell-background">8</attribute> + <attribute name="text">6</attribute> + </attributes> + </child> + <child> + <object class="GtkCellRendererPixbuf" id="GNUNET_GTK_download_description_renderer_pixbuf"> + <property name="xalign">1</property> + <property name="icon_name">gnunet-fs-gtk-ns-association</property> + </object> + <attributes> + <attribute name="visible">19</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_pixbuf_column"> + <property name="title" translatable="yes">Status</property> + <child> + <object class="GtkCellRendererPixbuf" id="GNUNET_GTK_download_status_cellrendererpixbuf"/> + <attributes> + <attribute name="cell-background">8</attribute> + <attribute name="pixbuf">17</attribute> + <attribute name="stock-id">8</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_availability_column"> + <property name="title">Availability</property> + <property name="clickable">True</property> + <property name="reorderable">True</property> + <property name="sort_indicator">True</property> + <property name="sort_column_id">5</property> + <child> + <object class="GtkCellRendererProgress" id="GNUNET_GTK_download_availability_renderer"/> + <attributes> + <attribute name="cell-background">8</attribute> + <attribute name="pulse">18</attribute> + <attribute name="value">5</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_mime_column"> + <property name="visible">False</property> + <property name="title">Format</property> + <property name="clickable">True</property> + <property name="reorderable">True</property> + <property name="sort_indicator">True</property> + <property name="sort_column_id">10</property> + <child> + <object class="GtkCellRendererText" id="GNUNET_GTK_download_mime_renderer"/> + <attributes> + <attribute name="cell-background">8</attribute> + <attribute name="text">10</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_completed_column"> + <property name="visible">False</property> + <property name="title">Completed (bytes)</property> + <property name="clickable">True</property> + <property name="reorderable">True</property> + <property name="sort_indicator">True</property> + <property name="sort_column_id">14</property> + <child> + <object class="GtkCellRendererText" id="GNUNET_GTK_download_completed_renderer"/> + <attributes> + <attribute name="cell-background">8</attribute> + <attribute name="text">14</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_size_column"> + <property name="title">Size</property> + <property name="clickable">True</property> + <property name="reorderable">True</property> + <property name="sort_indicator">True</property> + <property name="sort_column_id">2</property> + <child> + <object class="GtkCellRendererText" id="GNUNET_GTK_download_size_renderer"/> + <attributes> + <attribute name="cell-background">8</attribute> + <attribute name="text">2</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_progress_column"> + <property name="title">Progress</property> + <property name="clickable">True</property> + <property name="reorderable">True</property> + <property name="sort_indicator">True</property> + <property name="sort_column_id">4</property> + <child> + <object class="GtkCellRendererProgress" id="GNUNET_GTK_download_progress_renderer"/> + <attributes> + <attribute name="cell-background">8</attribute> + <attribute name="text">4</attribute> + <attribute name="value">4</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_download_applicability_column"> + <property name="visible">False</property> + <property name="title">#</property> + <property name="clickable">True</property> + <property name="reorderable">True</property> + <property name="sort_indicator">True</property> + <property name="sort_column_id">11</property> + <child> + <object class="GtkCellRendererText" id="GNUNET_GTK_download_applicability_renderer"/> + <attributes> + <attribute name="cell-background">8</attribute> + <attribute name="text">11</attribute> + </attributes> + </child> + </object> + </child> + </object> + </child> + <child type="tab"> + <object class="GtkBox" id="GNUNET_GTK_download_frame_hbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkImage" id="GNUNET_GTK_main_window_notebook_download_image"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-go-down</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkButton" id="_search_result_label_clear_button"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="GNUNET_FS_GTK_downloads_clear_button_clicked" swapped="no"/> + <child> + <object class="GtkImage" id="clear_icon_stock_image"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="stock">gtk-clear</property> + <property name="icon_size">2</property> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">5</property> + <property name="position">1</property> + </packing> + </child> + </object> + <packing> + <property name="tab_fill">False</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="GtkBox" id="GNUNET_GTK_search_frame_download_vbox"> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkBox" id="GNUNET_GTK_search_frame_download_into_hbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">4</property> + <child> + <object class="GtkLabel" id="GNUNET_GTK_search_frame_download_location_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Download into:</property> + <property name="single_line_mode">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkFileChooserButton" id="GNUNET_GTK_search_frame_download_location_chooser"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="action">select-folder</property> + <property name="title" translatable="yes">Select a directory to download into</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">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkBox" id="GNUNET_GTK_search_frame_download_filename_hbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">4</property> + <child> + <object class="GtkLabel" id="GNUNET_GTK_search_frame_download_filename_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Download as:</property> + <property name="single_line_mode">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkEntry" id="GNUNET_GTK_search_frame_download_filename_entry"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="invisible_char">●</property> + <property name="primary_icon_activatable">False</property> + <property name="secondary_icon_activatable">False</property> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkButton" id="GNUNET_GTK_search_frame_download_filename_change_button"> + <property name="label">…</property> + <property name="height_request">1</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="focus_on_click">False</property> + <property name="receives_default">False</property> + <signal name="clicked" handler="GNUNET_GTK_search_frame_download_filename_change_button_clicked_cb" swapped="no"/> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkBox" id="GNUNET_GTK_search_frame_download_misc_hbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="spacing">4</property> + <child> + <object class="GtkLabel" id="GNUNET_GTK_search_frame_download_anonymity_label"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="label" translatable="yes">Anonymity:</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkAlignment" id="main_window_download_anonymity_combobox_alignment"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="yscale">0</property> + <child> + <object class="GtkComboBox" id="main_window_download_anonymity_combobox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="model">anonymity_level_liststore</property> + <property name="active">1</property> + <child> + <object class="GtkCellRendererText" id="main_window_download_anonymity_combobox_renderer"/> + <attributes> + <attribute name="foreground">2</attribute> + <attribute name="text">0</attribute> + </attributes> + </child> + <child> + <object class="GtkCellRendererText" id="main_window_download_anonymity_combobox_renerer_level"/> + <attributes> + <attribute name="text">1</attribute> + </attributes> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">1</property> + </packing> + </child> + <child> + <object class="GtkCheckButton" id="GNUNET_GTK_search_frame_download_recursive_checkbox"> + <property name="label" translatable="yes">Recursive</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">False</property> + <property name="draw_indicator">True</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="pack_type">end</property> + <property name="position">2</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">2</property> + </packing> + </child> + <child> + <object class="GtkBox" id="GNUNET_GTK_search_frame_download_download_hbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <child> + <object class="GtkButton" id="GNUNET_GTK_search_frame_download_download_button"> + <property name="label" translatable="yes">Download!</property> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="receives_default">True</property> + <signal name="clicked" handler="GNUNET_GTK_search_frame_download_download_button_clicked_cb" swapped="no"/> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">0</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="position">3</property> + </packing> + </child> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</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="GtkBox" id="GNUNET_GTK_main_window_extras_vbox"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="orientation">vertical</property> + <child> + <object class="GtkImage" id="GNUNET_GTK_main_window_preview_image"> + <property name="visible">True</property> + <property name="can_focus">False</property> + <property name="has_tooltip">True</property> + <property name="tooltip_text" translatable="yes">Thumbnail associated with the currently selected content</property> + <property name="pixel_size">256</property> + </object> + <packing> + <property name="expand">False</property> + <property name="fill">False</property> + <property name="padding">5</property> + <property name="position">0</property> + </packing> + </child> + <child> + <object class="GtkScrolledWindow" id="GNUNET_GTK_main_window_metadata_scroll"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="tooltip_text" translatable="yes">File meta data</property> + <property name="hadjustment">adjustment1</property> + <property name="vadjustment">adjustment2</property> + <property name="shadow_type">in</property> + <child> + <object class="GtkTreeView" id="GNUNET_GTK_main_window_metadata_treeview"> + <property name="visible">True</property> + <property name="can_focus">True</property> + <property name="hadjustment">adjustment1</property> + <property name="vadjustment">adjustment2</property> + <property name="model">GNUNET_GTK_meta_data_list_store</property> + <property name="search_column">0</property> + <property name="rubber_banding">True</property> + <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-selection2"/> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_main_window_metadata_type_column"> + <property name="sizing">autosize</property> + <property name="title">Type</property> + <property name="clickable">True</property> + <property name="reorderable">True</property> + <property name="sort_indicator">True</property> + <child> + <object class="GtkCellRendererText" id="GNUNET_GTK_main_window_metadata_type_renderer"/> + <attributes> + <attribute name="text">2</attribute> + </attributes> + </child> + </object> + </child> + <child> + <object class="GtkTreeViewColumn" id="GNUNET_GTK_main_window_metadata_value_column"> + <property name="sizing">autosize</property> + <property name="title">Value</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_main_window_metadata_value_renderer"> + <property name="wrap_mode">word</property> + </object> + <attributes> + <attribute name="text">3</attribute> + </attributes> + </child> + </object> + </child> + </object> + </child> + </object> + <packing> + <property name="expand">True</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> + </object> + <packing> + <property name="expand">True</property> + <property name="fill">True</property> + <property name="position">3</property> + </packing> + </child> + </object> + </child> +</object> +<object class="GtkSizeGroup" id="GNUNET_FS_GTK_download_frame_vsize_group"> + <property name="mode">vertical</property> + <property name="ignore_hidden">True</property> + <widgets> + <widget name="GNUNET_GTK_search_frame_download_location_label"/> + <widget name="GNUNET_GTK_search_frame_download_filename_label"/> + <widget name="GNUNET_GTK_search_frame_download_anonymity_label"/> + <widget name="GNUNET_GTK_search_frame_download_location_chooser"/> + <widget name="GNUNET_GTK_search_frame_download_filename_entry"/> + <widget name="GNUNET_GTK_search_frame_download_filename_change_button"/> + <widget name="main_window_download_anonymity_combobox_alignment"/> + <widget name="GNUNET_GTK_search_frame_download_recursive_checkbox"/> + </widgets> +</object> +<object class="GtkSizeGroup" id="GNUNET_GTK_download_frame_labels_size_group"> + <widgets> + <widget name="GNUNET_GTK_search_frame_download_location_label"/> + <widget name="GNUNET_GTK_search_frame_download_anonymity_label"/> + <widget name="GNUNET_GTK_search_frame_download_filename_label"/> + </widgets> +</object> </interface> diff --git a/src/fs/gnunet-fs-gtk.c b/src/fs/gnunet-fs-gtk.c index a1230c03..c0e52797 100644 --- a/src/fs/gnunet-fs-gtk.c +++ b/src/fs/gnunet-fs-gtk.c @@ -27,6 +27,8 @@ #include "gnunet-fs-gtk_common.h" #include "gnunet-fs-gtk_event-handler.h" #include "gnunet-fs-gtk_open-uri.h" +#include "gnunet/gnunet_namestore_service.h" +#include <gmodule.h> #if HAVE_LIBUNIQUE #include <unique/unique.h> @@ -73,10 +75,58 @@ static struct GNUNET_ARM_MonitorHandle *armon; static struct GNUNET_ARM_Handle *arm; /** + * Ongoing identity operation. + */ +static struct GNUNET_IDENTITY_Operation *iop; + +/** * Context for main window. */ static struct GNUNET_GTK_MainWindowContext main_context; +/** + * Identity combo box in the main window. + */ +static GtkComboBox *id_combo_box; + +/** + * Currently selected entry in #id_liststore. + */ +static GtkTreeIter id_iter; + +/** + * List of all known egos. + */ +static GtkListStore *id_liststore; + +/** + * Status label in main window. + */ +static GtkLabel *status_label; + +/** + * Are we shutting down? + */ +static int in_shutdown = 0; + +/** + * Columns in the id list store. + */ +enum ID_COLUMNS +{ + + /** + * A gchararray + */ + ID_LS_NAME = 0, + + + /** + * A `struct GNUNET_IDENTITY_Ego` + */ + ID_LS_EGO = 1 +}; + #if HAVE_LIBUNIQUE static UniqueApp *unique_app; @@ -101,6 +151,21 @@ GNUNET_FS_GTK_get_fs_handle () return fs; } +/** + * Get an object from the main window. + * + * @param name name of the object + * @return NULL on error, otherwise the object + */ +static GObject * +get_object (const char *name) +{ + if (NULL == ml) + return NULL; + return GNUNET_GTK_main_loop_get_object (ml, name); +} + + /** * Remember FS handle if we don't have one yet. @@ -250,6 +315,11 @@ shutdown_task (void *cls) struct PseuLookupContext *lctx; struct SearchResult *sr; + in_shutdown = 1; + while (NULL != (sl = main_context.sl_head)) + abort_search_lookup (sl); + while (NULL != (lctx = main_context.lctx_head)) + abort_pseu_lookup (lctx); while (NULL != (sr = pl_head)) { GNUNET_FS_probe_stop (sr->probe); @@ -261,36 +331,16 @@ shutdown_task (void *cls) GNUNET_FS_stop (fs); fs = NULL; } - if (NULL != armon) + if (NULL != iop) { - GNUNET_ARM_monitor_stop (armon); - armon = NULL; - } - if (NULL != arm) - { - GNUNET_ARM_disconnect (arm); - arm = NULL; - } - GNUNET_FS_GTK_close_uri_tab_ (); - if (NULL != ml) - { - GNUNET_GTK_main_loop_quit (ml); - ml = NULL; - } - if (NULL != main_context.id_op) - { - GNUNET_IDENTITY_ego_lookup_cancel (main_context.id_op); - main_context.id_op = NULL; + GNUNET_IDENTITY_cancel (iop); + iop = NULL; } if (NULL != main_context.identity) { GNUNET_IDENTITY_disconnect (main_context.identity); main_context.identity = NULL; } - while (NULL != (sl = main_context.sl_head)) - abort_search_lookup (sl); - while (NULL != (lctx = main_context.lctx_head)) - abort_pseu_lookup (lctx); if (NULL != main_context.zm) { GNUNET_NAMESTORE_zone_monitor_stop (main_context.zm); @@ -301,6 +351,22 @@ shutdown_task (void *cls) GNUNET_GNS_disconnect (main_context.gns); main_context.gns = NULL; } + if (NULL != armon) + { + GNUNET_ARM_monitor_stop (armon); + armon = NULL; + } + if (NULL != arm) + { + GNUNET_ARM_disconnect (arm); + arm = NULL; + } + GNUNET_FS_GTK_close_uri_tab_ (); + if (NULL != ml) + { + GNUNET_GTK_main_loop_quit (ml); + ml = NULL; + } } @@ -664,6 +730,11 @@ handle_sks_zone_identity (void *cls, "main_window_search_namespace_label"))); gtk_widget_show (GTK_WIDGET (GNUNET_FS_GTK_get_main_window_object ( "main_window_search_namespace_combobox"))); + if (NULL != main_context.zm) + { + GNUNET_NAMESTORE_zone_monitor_stop(main_context.zm); + main_context.zm = NULL; + } main_context.zm = GNUNET_NAMESTORE_zone_monitor_start (main_context.cfg, GNUNET_IDENTITY_ego_get_private_key ( @@ -679,9 +750,57 @@ handle_sks_zone_identity (void *cls, /** - * We must pass a non-NULL callback to the identity service, - * but we don't actually care about the information here - * (we will use GNUNET_IDENTITY_get() if and when we do care). + * The user selected another identity in the combobox. Load it. + * + * @param widget the combo box where the selection was changed + * @param user_data the builder, unused + */ +void +gnunet_fs_gtk_id_combobox_changed_cb (GtkComboBox *widget, + gpointer user_data) +{ + GtkTreeIter iter; + struct GNUNET_IDENTITY_Ego *ego; + char *name; + + (void) user_data; + if (! gtk_combo_box_get_active_iter (id_combo_box, &iter)) + { + return; + } + id_iter = iter; + /* clang-format off */ + gtk_tree_model_get (GTK_TREE_MODEL (id_liststore), + &iter, + ID_LS_NAME, &name, + ID_LS_EGO, &ego, + -1); + /* clang-format on */ + handle_sks_zone_identity (name, ego); +} + +/** + * Method called to inform about the egos of this peer. Updates the + * `zone_liststore`. + * + * When used with #GNUNET_IDENTITY_connect, this function is + * initially called for all egos and then again whenever a + * ego's name changes or if it is deleted. At the end of + * the initial pass over all egos, the function is once called + * with 'NULL' for @a ego. That does NOT mean that the callback won't + * be invoked in the future or that there was an error. + * + * If @a ego is non-NULL and if '*ctx' is set in those callbacks, the + * value WILL be passed to a subsequent call to the identity callback + * of #GNUNET_IDENTITY_connect (if that one was not NULL). + * + * When an identity is renamed, this function is called with the + * (known) @a ego but the NEW @a name. + * + * When an identity is deleted, this function is called with the + * (known) ego and "NULL" for the @a name. In this case, + * the @a ego is henceforth invalid (and the @a ctx should also be + * cleaned up). * * @param cls closure * @param ego ego handle @@ -692,17 +811,70 @@ handle_sks_zone_identity (void *cls, * must thus no longer be used */ static void -non_null_cb (void *cls, +identity_cb (void *cls, struct GNUNET_IDENTITY_Ego *ego, void **ctx, const char *name) { - (void) cls; - (void) ego; - (void) ctx; - (void) name; -} + GtkTreeRowReference *rr; + GtkTreeIter iter; + GtkTreePath *path; + + if (in_shutdown) + return; + if ((NULL == ego) && (NULL == name) && (NULL == ctx)) + { + /* end of initial iteration, trigger loading selected zone */ + gnunet_fs_gtk_id_combobox_changed_cb (id_combo_box, ml); + return; + } + rr = *ctx; + if (NULL == rr) + { + /* clang-format off */ + gtk_list_store_insert_with_values (id_liststore, + &iter, 0, + ID_LS_NAME, name, + ID_LS_EGO, ego, + -1); + /* clang-format on */ + gtk_combo_box_set_active_iter (id_combo_box, &iter); + gtk_widget_set_sensitive (GTK_WIDGET (id_combo_box), TRUE); + path = gtk_tree_model_get_path (GTK_TREE_MODEL (id_liststore), &iter); + rr = gtk_tree_row_reference_new (GTK_TREE_MODEL (id_liststore), path); + *ctx = rr; + gtk_tree_path_free (path); + return; + } + path = gtk_tree_row_reference_get_path (rr); + GNUNET_break ( + gtk_tree_model_get_iter (GTK_TREE_MODEL (id_liststore), &iter, path)); + gtk_tree_path_free (path); + if (NULL == name) + { + GtkTreeIter act_iter; + /* identity was removed, remove from list */ + gtk_list_store_remove (id_liststore, &iter); + if (! gtk_combo_box_get_active_iter (id_combo_box, &act_iter)) + { + if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (id_liststore), + &act_iter)) + { + /* make sure combo box remains selected if possible */ + gtk_combo_box_set_active (id_combo_box, 0); + } + else + { + /* make combo box insensitive if nothing can be selected */ + gtk_widget_set_sensitive (GTK_WIDGET (id_combo_box), FALSE); + } + } + return; + } + /* identity was renamed, rename in model */ + gtk_list_store_set (id_liststore, &iter, ID_LS_NAME, name, -1); +} /** * Actual main function run right after GNUnet's scheduler @@ -720,7 +892,6 @@ run (void *cls) unsigned long long window_width; unsigned long long window_height; int maximized; - char *default_ego_name; ml = cls; /* setup main context */ @@ -789,6 +960,11 @@ run (void *cls) GTK_IMAGE (GNUNET_FS_GTK_get_main_window_object ( "GNUNET_FS_GTK_main_window_connection_indicator")); + status_label = GTK_LABEL (get_object ( + "gnunet_fs_gtk_status_label")); + id_combo_box = + GTK_COMBO_BOX (get_object ("gnunet_fs_gtk_id_combobox")); + id_liststore = GTK_LIST_STORE (get_object ("id_liststore")); GNUNET_GTK_set_icon_search_path (); GNUNET_GTK_setup_nls (); @@ -856,17 +1032,6 @@ run (void *cls) "MAX_PARALLEL_REQUESTS", &req_parallel)) req_parallel = DEFAULT_MAX_PARALLEL_REQUESTS; - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_string (main_context.cfg, - "fs-sks", - "DEFAULT_IDENTITY", - &default_ego_name)) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Please set DEFAULT_IDENTITY under [fs-sks]\n"); - GNUNET_GTK_main_loop_quit (cls); - return; - } /* initialize file-sharing */ fs = GNUNET_FS_start (main_context.cfg, "gnunet-fs-gtk", @@ -890,13 +1055,8 @@ run (void *cls) &service_status_change, &main_context); main_context.gns = GNUNET_GNS_connect (main_context.cfg); - main_context.identity = - GNUNET_IDENTITY_connect (main_context.cfg, &non_null_cb, NULL); - main_context.id_op = GNUNET_IDENTITY_ego_lookup (main_context.cfg, - default_ego_name, - &handle_sks_zone_identity, - NULL); - GNUNET_free (default_ego_name); + main_context.identity = GNUNET_IDENTITY_connect (main_context.cfg, + &identity_cb, NULL); #if HAVE_LIBUNIQUE unique_app_watch_window (unique_app, GTK_WINDOW (main_context.main_window)); g_signal_connect (unique_app, diff --git a/src/namestore/gnunet-namestore-gtk.c b/src/namestore/gnunet-namestore-gtk.c index 2981e16f..f7df0a10 100644 --- a/src/namestore/gnunet-namestore-gtk.c +++ b/src/namestore/gnunet-namestore-gtk.c @@ -2580,7 +2580,6 @@ zone_iteration_proc (void *cls, } } - /** * Method called to switch the model to a new zone. * |