[Top][All Lists]
[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)
{
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r18638 - in gnunet-gtk: contrib src/fs,
gnunet <=