gnunet-svn
[Top][All Lists]
Advanced

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

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


From: gnunet
Subject: [GNUnet-SVN] r18638 - in gnunet-gtk: contrib src/fs
Date: Fri, 16 Dec 2011 19:58:07 +0100

Author: grothoff
Date: 2011-12-16 19:58:07 +0100 (Fri, 16 Dec 2011)
New Revision: 18638

Modified:
   gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade
   gnunet-gtk/contrib/gnunet_fs_gtk_search_tab.glade
   gnunet-gtk/src/fs/gnunet-fs-gtk-event_handler.c
   gnunet-gtk/src/fs/gnunet-fs-gtk.c
Log:
LRN: [PATCH 1/2] Multiple GUI changes (#1759)

* Rename "Key" column to "Root"
* Make namespace selector focusable
* Namespace selector now tracks mouse pointer
* Namespace is chosen by a single click
* Namespace list is populated by namespace descovery callback
  instead of namespace list callback
  (adds found namespaces on the fly)

* Normalized cell background for search results
  Now rows look like they have uniform background
* Add tooltips with full query text to search tab

* Root is added to the query when a search in namespace is made



Modified: gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade  2011-12-16 18:45:19 UTC 
(rev 18637)
+++ gnunet-gtk/contrib/gnunet_fs_gtk_main_window.glade  2011-12-16 18:58:07 UTC 
(rev 18638)
@@ -676,38 +676,6 @@
       <column type="gchararray"/>
     </columns>
   </object>
-  <object class="GtkAdjustment" id="adjustment1">
-    <property name="upper">100</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-    <property name="page_size">10</property>
-  </object>
-  <object class="GtkAdjustment" id="adjustment2">
-    <property name="upper">100</property>
-    <property name="step_increment">1</property>
-    <property name="page_increment">10</property>
-    <property name="page_size">10</property>
-  </object>
-  <object class="GtkImage" id="image3">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-new</property>
-  </object>
-  <object class="GtkImage" id="image4">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-find</property>
-  </object>
-  <object class="GtkImage" id="image5">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-go-down</property>
-  </object>
-  <object class="GtkImage" id="image6">
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="stock">gtk-index</property>
-  </object>
   <object class="GtkListStore" id="GNUNET_GTK_peer_info_list_store">
     <columns>
       <!-- column-name peer_identity -->
@@ -722,6 +690,18 @@
       <column type="guint64"/>
     </columns>
   </object>
+  <object class="GtkAdjustment" id="adjustment1">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+    <property name="page_size">10</property>
+  </object>
+  <object class="GtkAdjustment" id="adjustment2">
+    <property name="upper">100</property>
+    <property name="step_increment">1</property>
+    <property name="page_increment">10</property>
+    <property name="page_size">10</property>
+  </object>
   <object class="GtkAdjustment" id="adjustment3">
     <property name="upper">100</property>
     <property name="step_increment">1</property>
@@ -744,6 +724,26 @@
     <property name="can_focus">False</property>
     <property name="stock">gtk-go-up</property>
   </object>
+  <object class="GtkImage" id="image3">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-new</property>
+  </object>
+  <object class="GtkImage" id="image4">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-find</property>
+  </object>
+  <object class="GtkImage" id="image5">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-go-down</property>
+  </object>
+  <object class="GtkImage" id="image6">
+    <property name="visible">True</property>
+    <property name="can_focus">False</property>
+    <property name="stock">gtk-index</property>
+  </object>
   <object class="GtkImage" id="image7">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -786,6 +786,14 @@
       </row>
     </data>
   </object>
+  <object class="GtkSizeGroup" id="enties_and_comboboxes_sizegroup">
+    <property name="mode">vertical</property>
+    <widgets>
+      <widget name="main_window_search_entry"/>
+      <widget name="main_window_search_anonymity_combobox"/>
+      <widget name="main_window_search_mime_combobox"/>
+    </widgets>
+  </object>
   <object class="GtkListStore" id="main_window_search_mime_liststore">
     <columns>
       <!-- column-name MIME -->
@@ -830,21 +838,13 @@
       </row>
     </data>
   </object>
-  <object class="GtkSizeGroup" id="enties_and_comboboxes_sizegroup">
-    <property name="mode">vertical</property>
-    <widgets>
-      <widget name="main_window_search_entry"/>
-      <widget name="main_window_search_anonymity_combobox"/>
-      <widget name="main_window_search_mime_combobox"/>
-    </widgets>
-  </object>
   <object class="GtkTreeStore" id="main_window_search_namespace_treestore">
     <columns>
       <!-- column-name Name -->
       <column type="gchararray"/>
       <!-- column-name Key -->
       <column type="gpointer"/>
-      <!-- column-name KeyTextual -->
+      <!-- column-name Root -->
       <column type="gchararray"/>
       <!-- column-name Tooltip -->
       <column type="gchararray"/>
@@ -853,7 +853,6 @@
   <object class="GtkWindow" id="namespace_selector_window">
     <property name="can_focus">False</property>
     <property name="events">GDK_LEAVE_NOTIFY_MASK | 
GDK_STRUCTURE_MASK</property>
-    <property name="type">popup</property>
     <property name="resizable">False</property>
     <property name="type_hint">dropdown-menu</property>
     <property name="skip_taskbar_hint">True</property>
@@ -869,12 +868,15 @@
       <object class="GtkTreeView" id="namespace_selector_treeview">
         <property name="visible">True</property>
         <property name="can_focus">True</property>
+        <property name="is_focus">True</property>
         <property 
name="model">main_window_search_namespace_treestore</property>
         <property name="headers_clickable">False</property>
         <property name="search_column">0</property>
+        <property name="hover_selection">True</property>
         <property name="hover_expand">True</property>
         <property name="tooltip_column">3</property>
-        <signal name="cursor-changed" 
handler="namespace_selector_treeview_cursor_changed_cb" swapped="no"/>
+        <signal name="button-press-event" 
handler="namespace_selector_treeview_button_press_event_cb" swapped="no"/>
+        <signal name="button-release-event" 
handler="namespace_selector_treeview_button_release_event_cb" swapped="no"/>
         <child>
           <object class="GtkTreeViewColumn" id="name_column">
             <property name="sizing">autosize</property>
@@ -890,7 +892,7 @@
         <child>
           <object class="GtkTreeViewColumn" id="key_column">
             <property name="sizing">autosize</property>
-            <property name="title" translatable="yes">Key</property>
+            <property name="title" translatable="yes">Root</property>
             <child>
               <object class="GtkCellRendererText" 
id="namespace_selector_key_column_text_cell"/>
               <attributes>

Modified: gnunet-gtk/contrib/gnunet_fs_gtk_search_tab.glade
===================================================================
--- gnunet-gtk/contrib/gnunet_fs_gtk_search_tab.glade   2011-12-16 18:45:19 UTC 
(rev 18637)
+++ gnunet-gtk/contrib/gnunet_fs_gtk_search_tab.glade   2011-12-16 18:58:07 UTC 
(rev 18638)
@@ -89,7 +89,7 @@
                 <child>
                   <object class="GtkCellRendererText" 
id="search_result_mime_renderer"/>
                   <attributes>
-                    <attribute name="background">8</attribute>
+                    <attribute name="cell-background">8</attribute>
                     <attribute name="text">10</attribute>
                   </attributes>
                 </child>
@@ -123,7 +123,7 @@
                 <child>
                   <object class="GtkCellRendererText" 
id="search_result_applicability_renderer"/>
                   <attributes>
-                    <attribute name="background">8</attribute>
+                    <attribute name="cell-background">8</attribute>
                     <attribute name="text">11</attribute>
                   </attributes>
                 </child>
@@ -138,6 +138,7 @@
                 <child>
                   <object class="GtkCellRendererPixbuf" 
id="search_result_preview_renderer"/>
                   <attributes>
+                    <attribute name="cell-background">8</attribute>
                     <attribute name="pixbuf">3</attribute>
                   </attributes>
                 </child>

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk-event_handler.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk-event_handler.c     2011-12-16 18:45:19 UTC 
(rev 18637)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk-event_handler.c     2011-12-16 18:58:07 UTC 
(rev 18638)
@@ -889,6 +889,7 @@
     GNUNET_asprintf (&name, "%.*s%s", 20, tab->query_txt,
                      strlen (tab->query_txt) > 20 ? "..." : "");
   gtk_label_set_text (tab->label, name);
+  gtk_widget_set_tooltip_text (GTK_WIDGET (tab->label), tab->query_txt);
   GNUNET_free (name);
 }
 

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk.c   2011-12-16 18:45:19 UTC (rev 18637)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk.c   2011-12-16 18:58:07 UTC (rev 18638)
@@ -137,7 +137,9 @@
   gboolean active;
   GtkBuilder *builder = GTK_BUILDER (user_data);
   GtkWidget *namespace_selector_window;
+  GtkWidget *namespace_selector_treeview;
   namespace_selector_window = GTK_WIDGET (gtk_builder_get_object (builder, 
"namespace_selector_window"));
+  namespace_selector_treeview = GTK_WIDGET (gtk_builder_get_object (builder, 
"namespace_selector_treeview"));
   g_object_get (G_OBJECT (togglebutton), "active", &active, NULL);
   if (active)
   {
@@ -162,10 +164,14 @@
 
     gtk_window_move (GTK_WINDOW (namespace_selector_window), popup_x, popup_y);
 
-    gtk_widget_show (namespace_selector_window);
+    gtk_widget_show_all (namespace_selector_window);
+    gtk_widget_grab_focus (namespace_selector_treeview);
   }
   else
+  {
     gtk_widget_hide (namespace_selector_window);
+    gtk_widget_grab_focus (GTK_WIDGET (togglebutton));
+  }
 }
 
 gboolean
@@ -314,18 +320,26 @@
   GtkBuilder *builder;
   GtkToggleButton *toggle_button;
   GtkLabel *sel_namespace_label;
+  GtkTreeModel *model;
   gchar *value;
   GtkTreePath *treepath;
+  GtkTreeRowReference *ref, *old;
 
   builder = GTK_BUILDER (user_data);
 
-  if (!get_selected_namespace_treepath_iter_model_widget (builder, &treepath, 
NULL, NULL, NULL))
-    return;
-
   toggle_button = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder, 
"main_window_search_namespace_dropdown_button"));
   if (!toggle_button)
     return;
 
+  if (!get_selected_namespace_treepath_iter_model_widget (builder, &treepath, 
NULL, &model, NULL))
+    return;
+  ref = gtk_tree_row_reference_new (model, treepath);
+  old = g_object_get_data (G_OBJECT (toggle_button), "selected-row-reference");
+  if (old)
+    gtk_tree_row_reference_free (old);
+  g_object_set_data (G_OBJECT (toggle_button), "selected-row-reference", ref);
+
+
   sel_namespace_label = GTK_LABEL (gtk_builder_get_object (builder, 
"main_window_search_selected_namespace_label"));
   if (!sel_namespace_label)
     return;
@@ -340,6 +354,72 @@
   gtk_toggle_button_set_active (toggle_button, FALSE);
 }
 
+GtkTreeRowReference *
+get_ns_selected_row (GtkTreeView *tree)
+{
+  GtkTreeSelection *sel;
+  GList *rows, *row;
+  GtkTreeModel *model;
+  GtkTreeRowReference *ref = NULL;
+
+  sel = gtk_tree_view_get_selection (tree);
+  rows = gtk_tree_selection_get_selected_rows (sel, &model);
+  for (row = rows; row; row = row->next)
+  {
+    ref = gtk_tree_row_reference_new (model, row->data);
+    if (ref != NULL)
+      break;
+  }
+  g_list_foreach (rows, (GFunc) gtk_tree_path_free, NULL);
+  g_list_free (rows);
+  return ref;
+}
+
+gboolean
+namespace_selector_treeview_button_press_event_cb (GtkWidget *widget,
+    GdkEvent *event, gpointer user_data)
+{
+  GtkTreeRowReference *ref = NULL;
+
+  ref = get_ns_selected_row (GTK_TREE_VIEW (widget));
+  if (ref != NULL)
+  {
+    gpointer old = g_object_get_data (G_OBJECT (widget), 
"pushed-rowreference");
+    if (old)
+      gtk_tree_row_reference_free (old);
+    g_object_set_data (G_OBJECT (widget), "pushed-rowreference", ref);
+  }
+  return FALSE;
+}
+
+gboolean
+namespace_selector_treeview_button_release_event_cb (GtkWidget *widget,
+    GdkEvent *event, gpointer user_data)
+{
+  GtkTreeRowReference *ref = NULL;
+  gpointer old = g_object_get_data (G_OBJECT (widget), "pushed-rowreference");
+
+  ref = get_ns_selected_row (GTK_TREE_VIEW (widget));
+  if (ref && old)
+  {
+    GtkTreePath *path_ref, *path_old;
+    path_ref = gtk_tree_row_reference_get_path (ref);
+    path_old = gtk_tree_row_reference_get_path (old);
+    if (gtk_tree_path_compare (path_ref, path_old) == 0)
+      namespace_selector_treeview_cursor_changed_cb (widget, user_data);
+    if (path_ref)
+      gtk_tree_path_free (path_ref);
+    if (path_old)
+      gtk_tree_path_free (path_old);
+  }
+  if (ref)
+    gtk_tree_row_reference_free (ref);
+  if (old)
+    gtk_tree_row_reference_free (old);
+  g_object_set_data (G_OBJECT (widget), "pushed-rowreference", NULL);
+  return FALSE;
+}
+
 void
 main_window_search_button_clicked_cb (GtkButton *button, gpointer user_data)
 {
@@ -350,17 +430,23 @@
   GtkTreeModel *mime_model;
   GtkEntry *query_entry;
   guint anonymity_level;
+  GtkTreeRowReference *ref = NULL;
   GtkTreeIter iter;
+  GtkToggleButton *toggle_button;
   const char *entry_keywords;
   gchar *keywords;
   gchar *mime_keyword;
 
   GNUNET_HashCode *nsid = NULL;
   struct GNUNET_FS_Uri *uri;
+  gchar *root = NULL;
   char *emsg;
 
   builder = GTK_BUILDER (user_data);
 
+  toggle_button = GTK_TOGGLE_BUTTON (gtk_builder_get_object (builder,
+      "main_window_search_namespace_dropdown_button"));
+
   if (!get_selected_anonymity_level (builder, &anonymity_level))
     return;
 
@@ -372,23 +458,30 @@
     mime_keyword = NULL;
     gtk_tree_model_get (mime_model, &iter, 0, &mime_keyword, -1);
   }
+  if (mime_keyword == NULL)
+    mime_keyword = g_strdup ("");
 
-  get_selected_namespace_treepath_iter_model_widget (builder,
-      &namespace_treepath, &iter, &namespace_model, NULL);
+  ref = g_object_get_data (G_OBJECT (toggle_button), "selected-row-reference");
+  if (ref)
+  {
+    namespace_model = gtk_tree_row_reference_get_model (ref);
+    namespace_treepath = gtk_tree_row_reference_get_path (ref);
+    gtk_tree_model_get_iter (namespace_model, &iter, namespace_treepath);
+  }
 
   query_entry = GTK_ENTRY (gtk_builder_get_object (builder,
       "main_window_search_entry"));
 
+  if (namespace_treepath != NULL)
+    gtk_tree_model_get (namespace_model, &iter, 1, &nsid, 2, &root, -1);
+  if (root == NULL)
+    root = g_strdup ("");
+
   entry_keywords = gtk_entry_get_text (query_entry);
-  if (mime_keyword != NULL)
-  {
-    keywords = g_strdup_printf ("%s %s", entry_keywords, mime_keyword);
-    g_free (mime_keyword);
-  }
-  else
-    keywords = g_strdup (entry_keywords);
-  if (namespace_treepath != NULL)
-    gtk_tree_model_get (namespace_model, &iter, 1, &nsid, -1);
+
+  keywords = g_strdup_printf ("%s %s %s", entry_keywords, mime_keyword, root);
+  g_free (mime_keyword);
+  g_free (root);
   if (nsid != NULL)
   {
     uri = GNUNET_FS_uri_sks_create_from_nsid (nsid, keywords);
@@ -487,11 +580,25 @@
   namespace_tree = GTK_TREE_VIEW (GNUNET_FS_GTK_get_main_window_object
       ("namespace_selector_treeview"));
 
+  /* FIXME: find a way to manage pseudonyms.
+   * Right now the list will be filled with ALL and ANY pseudonyms that we
+   * find, these are held as files in a special directory.
+   * I don't see an easy way to ignore certain pseudonyms in that directory,
+   * and that require for pseudonym management. Also, pseudonyms are presented
+   * in arbitrary order. We must either sort them (by name?) or let the user
+   * drag them around to change the order in which they appear in the list.
+   * All that is not possible with a simple "files in a directory" concept.
+   */
   gtk_tree_store_insert_with_values (namespace_treestore, &iter, NULL,
       G_MAXINT, 0, "Any", 1, NULL, 2, "", 3,
       "Do not search in any particular namespace", -1);
+  /*
   GNUNET_PSEUDONYM_list_all (GNUNET_FS_GTK_get_configuration (),
                              &add_namespace_to_ts, namespace_treestore);
+  */
+  GNUNET_PSEUDONYM_discovery_callback_register (
+      GNUNET_FS_GTK_get_configuration (),
+      &add_namespace_to_ts, namespace_treestore);
 
   /* FIXME: read currently selected namespace from somewhere instead of 
selecting 0th item */
   if (gtk_tree_model_get_iter_first (GTK_TREE_MODEL (namespace_treestore), 
&iter))
@@ -581,7 +688,6 @@
 
 }
 
-
 int
 main (int argc, char *const *argv)
 {




reply via email to

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