gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r19605 - in gnunet-gtk/src: fs include lib


From: gnunet
Subject: [GNUnet-SVN] r19605 - in gnunet-gtk/src: fs include lib
Date: Wed, 1 Feb 2012 18:27:02 +0100

Author: grothoff
Date: 2012-02-01 18:27:02 +0100 (Wed, 01 Feb 2012)
New Revision: 19605

Added:
   gnunet-gtk/src/fs/gnunet-fs-gtk-anonymity_spin_buttons.h
   gnunet-gtk/src/fs/gnunet-fs-gtk-main_window_namespace.c
Modified:
   gnunet-gtk/src/fs/Makefile.am
   gnunet-gtk/src/fs/gnunet-fs-gtk-about.c
   gnunet-gtk/src/fs/gnunet-fs-gtk-anonymity_spin_buttons.c
   gnunet-gtk/src/fs/gnunet-fs-gtk.c
   gnunet-gtk/src/include/gnunet_gtk.h
   gnunet-gtk/src/lib/glade.c
Log:
-moving code around

Modified: gnunet-gtk/src/fs/Makefile.am
===================================================================
--- gnunet-gtk/src/fs/Makefile.am       2012-02-01 17:11:35 UTC (rev 19604)
+++ gnunet-gtk/src/fs/Makefile.am       2012-02-01 17:27:02 UTC (rev 19605)
@@ -15,12 +15,13 @@
   gnunet-fs-gtk-download.c gnunet-fs-gtk-download.h \
   gnunet-fs-gtk-edit_publish_dialog.c gnunet-fs-gtk-edit_publish_dialog.h \
   gnunet-fs-gtk-event_handler.c gnunet-fs-gtk-event_handler.h \
-  gnunet-fs-gtk-anonymity_spin_buttons.c \
+  gnunet-fs-gtk-anonymity_spin_buttons.c 
gnunet-fs-gtk-anonymity_spin_buttons.h \
   gnunet-fs-gtk-main_window_meta_data_context_menu.c \
   gnunet-fs-gtk.c gnunet-fs-gtk.h \
   gnunet-fs-gtk-main_window_create_pseudonym.c \
   gnunet-fs-gtk-main_window_file_download.c \
   gnunet-fs-gtk-main_window_file_publish.c \
+  gnunet-fs-gtk-main_window_namespace.c \
   gnunet-fs-gtk-main_window_open_directory.c \
   gnunet-fs-gtk-main_window_adv_pseudonym.c \
   gnunet-fs-gtk-main_window_view_toggles.c 

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk-about.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk-about.c     2012-02-01 17:11:35 UTC (rev 
19604)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk-about.c     2012-02-01 17:27:02 UTC (rev 
19605)
@@ -30,6 +30,9 @@
 
 /**
  * This displays an about window
+ *
+ * @param widget widget creating the event, unused
+ * @param data global builder, unused
  */
 void
 GNUNET_GTK_main_menu_help_about_activate_cb (GtkWidget * dummy, gpointer data)

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk-anonymity_spin_buttons.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk-anonymity_spin_buttons.c    2012-02-01 
17:11:35 UTC (rev 19604)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk-anonymity_spin_buttons.c    2012-02-01 
17:27:02 UTC (rev 19605)
@@ -21,15 +21,17 @@
 /**
  * @file src/fs/gnunet-fs-gtk-anonymtiy_spin_buttons.c
  * @author Christian Grothoff
- *
- * This file contains callbacks to turn spin buttons red when the
- * value reaches zero.
+ * @brief operations to manage user's anonymity level selections
  */
 #include "gnunet-fs-gtk-common.h"
 #include <gdk/gdk.h>
 
 /**
- * Spin button is changed, update its colour.
+ * Spin button is changed, update its color.  NOTE: This function will 
eventually
+ * become obsolete as we migrate to the drop-down style of anonymity-level 
selection.
+ *
+ * @param w the spin button that changed
+ * @param builder's closure, unused
  */
 void
 GNUNET_GTK_anonymity_spin_button_value_changed_cb (GtkWidget * w, gpointer 
data)
@@ -69,4 +71,109 @@
 }
 
 
+
+gboolean
+GNUNET_GTK_get_selected_anonymity_level (GtkBuilder * builder,
+                                         gchar * combo_name, guint * p_level)
+{
+  GtkComboBox *combo;
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  guint level;
+
+  combo = GTK_COMBO_BOX (gtk_builder_get_object (builder, combo_name));
+  if (!combo)
+    return FALSE;
+
+  if (!gtk_combo_box_get_active_iter (combo, &iter))
+    return FALSE;
+
+  model = gtk_combo_box_get_model (combo);
+  if (!model)
+    return FALSE;
+
+  gtk_tree_model_get (model, &iter, 1, &level, -1);
+  if (p_level)
+    *p_level = level;
+  return TRUE;
+}
+
+gboolean
+GNUNET_GTK_get_selected_anonymity_combo_level (GtkComboBox *combo, guint 
*p_level)
+{
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  guint level;
+
+  if (!gtk_combo_box_get_active_iter (combo, &iter))
+    return FALSE;
+
+  model = gtk_combo_box_get_model (combo);
+  if (!model)
+    return FALSE;
+
+  gtk_tree_model_get (model, &iter, 1, &level, -1);
+  if (p_level)
+    *p_level = level;
+  return TRUE;
+}
+
+gboolean
+GNUNET_GTK_select_anonymity_level (GtkBuilder * builder, gchar * combo_name,
+                                   guint sel_level)
+{
+  GtkComboBox *combo;
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  guint level;
+  gboolean go_on;
+
+  combo = GTK_COMBO_BOX (gtk_builder_get_object (builder, combo_name));
+  if (!combo)
+    return FALSE;
+
+  model = gtk_combo_box_get_model (combo);
+  if (!model)
+    return FALSE;
+
+  for (go_on = gtk_tree_model_get_iter_first (model, &iter); go_on;
+       go_on = gtk_tree_model_iter_next (model, &iter))
+  {
+    gtk_tree_model_get (model, &iter, 1, &level, -1);
+    if (level == sel_level)
+    {
+      gtk_combo_box_set_active_iter (combo, &iter);
+      return TRUE;
+    }
+  }
+  return FALSE;
+}
+
+gboolean
+GNUNET_GTK_select_anonymity_combo_level (GtkComboBox *combo, guint sel_level)
+{
+  GtkTreeIter iter;
+  GtkTreeModel *model;
+  guint level;
+  gboolean go_on;
+
+  model = gtk_combo_box_get_model (combo);
+  if (!model)
+    return FALSE;
+
+  for (go_on = gtk_tree_model_get_iter_first (model, &iter); go_on;
+       go_on = gtk_tree_model_iter_next (model, &iter))
+  {
+    gtk_tree_model_get (model, &iter, 1, &level, -1);
+    if (level == sel_level)
+    {
+      gtk_combo_box_set_active_iter (combo, &iter);
+      return TRUE;
+    }
+  }
+  return FALSE;
+}
+
+
+
 /* end of gnunet-fs-gtk-anonymtiy_spin_buttons.c */

Added: gnunet-gtk/src/fs/gnunet-fs-gtk-anonymity_spin_buttons.h
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk-anonymity_spin_buttons.h                    
        (rev 0)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk-anonymity_spin_buttons.h    2012-02-01 
17:27:02 UTC (rev 19605)
@@ -0,0 +1,50 @@
+/*
+     This file is part of GNUnet
+     (C) 2005, 2006, 2010 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file src/fs/gnunet-fs-gtk-anonymtiy_spin_buttons.c
+ * @author Christian Grothoff
+ * @brief operations to manage user's anonymity level selections
+ */
+#ifndef GNUNET_FS_GTK_ANONYMITY_SPIN_BUTTONS_H
+#define GNUNET_FS_GTK_ANONYMITY_SPIN_BUTTONS_H
+
+#include "gnunet-fs-gtk-common.h"
+#include <gdk/gdk.h>
+
+
+gboolean
+GNUNET_GTK_get_selected_anonymity_level (GtkBuilder * builder,
+                                         gchar * combo_name, guint * p_level);
+
+
+gboolean
+GNUNET_GTK_get_selected_anonymity_combo_level (GtkComboBox *combo, guint 
*p_level);
+
+
+
+gboolean
+GNUNET_GTK_select_anonymity_level (GtkBuilder * builder, gchar * combo_name,
+                                   guint sel_level);
+
+gboolean
+GNUNET_GTK_select_anonymity_combo_level (GtkComboBox *combo, guint sel_level);
+
+#endif

Added: gnunet-gtk/src/fs/gnunet-fs-gtk-main_window_namespace.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk-main_window_namespace.c                     
        (rev 0)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk-main_window_namespace.c     2012-02-01 
17:27:02 UTC (rev 19605)
@@ -0,0 +1,349 @@
+/*
+     This file is part of GNUnet
+     (C) 2011, 2012 Christian Grothoff (and other contributing authors)
+
+     GNUnet is free software; you can redistribute it and/or modify
+     it under the terms of the GNU General Public License as published
+     by the Free Software Foundation; either version 2, or (at your
+     option) any later version.
+
+     GNUnet is distributed in the hope that it will be useful, but
+     WITHOUT ANY WARRANTY; without even the implied warranty of
+     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+     General Public License for more details.
+
+     You should have received a copy of the GNU General Public License
+     along with GNUnet; see the file COPYING.  If not, write to the
+     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+     Boston, MA 02111-1307, USA.
+*/
+
+/**
+ * @file src/fs/gnunet-fs-gtk-main_window_namespace.c
+ * @author Christian Grothoff
+ * @brief event handlers for the namespace selection dropdown box in the main 
window
+ */
+#include "gnunet-fs-gtk-common.h"
+#include <gdk/gdk.h>
+
+
+void
+main_window_search_namespace_dropdown_button_toggled_cb (GtkToggleButton *
+                                                         togglebutton,
+                                                         gpointer user_data)
+{
+  GtkBuilder *builder = GTK_BUILDER (user_data);
+  gboolean active;
+  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)
+  {
+    GtkAllocation togglebutton_allocation;
+    GdkWindow *main_window_gdk;
+    gint mwg_x, mwg_y, tgb_x, tgb_y, popup_x, popup_y;
+
+    gtk_widget_get_allocation (GTK_WIDGET (togglebutton),
+                               &togglebutton_allocation);
+
+    main_window_gdk = gtk_widget_get_window (GTK_WIDGET (togglebutton));
+
+    gdk_window_get_origin (main_window_gdk, &mwg_x, &mwg_y);
+
+    /* FIXME: this might become a problem in other window managers,
+     * where reference point is not in the top-left corner.
+     * We want to show the window below the button.
+     */
+    tgb_x = mwg_x + togglebutton_allocation.x;
+    tgb_y = mwg_y + togglebutton_allocation.y;
+    popup_x = tgb_x;
+    popup_y = tgb_y + togglebutton_allocation.height;
+
+    gtk_window_move (GTK_WINDOW (namespace_selector_window), popup_x, popup_y);
+
+    gtk_widget_show_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
+namespace_selector_window_leave_timeout_cb (gpointer user_data)
+{
+  GtkToggleButton *toggle_button = GTK_TOGGLE_BUTTON (user_data);
+
+  /* This will eventually hide the namespace selector */
+  gtk_toggle_button_set_active (toggle_button, FALSE);
+  return FALSE;
+}
+
+
+gboolean
+main_window_search_namespace_dropdown_button_enter_notify_event_cb (GtkWidget *
+                                                                    widget,
+                                                                    GdkEvent *
+                                                                    event,
+                                                                    gpointer
+                                                                    user_data)
+{
+  if (namespace_selector_window_leave_timeout_source > 0)
+    g_source_remove (namespace_selector_window_leave_timeout_source);
+  return FALSE;
+}
+
+
+gboolean
+namespace_selector_window_leave_notify_event_cb (GtkWidget * widget,
+                                                 GdkEvent * event,
+                                                 gpointer user_data)
+{
+  GtkBuilder *builder;
+  GtkToggleButton *toggle_button;
+  guint timeout_id;
+
+  builder = GTK_BUILDER (user_data);
+
+  toggle_button =
+      GTK_TOGGLE_BUTTON (gtk_builder_get_object
+                         (builder,
+                          "main_window_search_namespace_dropdown_button"));
+
+  /* Place a timeout to hide the window. It will be cancelled if the cursor
+   * enters the namespace selector window or the toggle button within 100ms.
+   */
+  timeout_id =
+      g_timeout_add (100, &namespace_selector_window_leave_timeout_cb,
+                     toggle_button);
+  if (namespace_selector_window_leave_timeout_source > 0)
+    g_source_remove (namespace_selector_window_leave_timeout_source);
+  namespace_selector_window_leave_timeout_source = timeout_id;
+
+  return FALSE;
+}
+
+
+static gboolean
+GNUNET_GTK_get_tree_string (GtkTreeView * treeview, GtkTreePath * treepath,
+                            guint column, gchar ** value)
+{
+  gboolean ok;
+  GtkTreeModel *model;
+
+  model = gtk_tree_view_get_model (treeview);
+  if (!model)
+    return FALSE;
+
+  GtkTreeIter iter;
+
+  ok = gtk_tree_model_get_iter (model, &iter, treepath);
+  if (!ok)
+    return FALSE;
+
+  *value = NULL;
+  gtk_tree_model_get (model, &iter, column, value, -1);
+  if (*value == NULL)
+    return FALSE;
+  return TRUE;
+}
+
+
+
+gboolean
+get_selected_namespace_treepath_iter_model_widget (GtkBuilder * builder,
+                                                   GtkTreePath ** p_treepath,
+                                                   GtkTreeIter * p_iter,
+                                                   GtkTreeModel ** p_model,
+                                                   GtkWidget ** p_widget)
+{
+  GtkTreeSelection *selection;
+  GtkTreeModel *model;
+  GList *selected;
+  GtkTreePath *treepath;
+  GtkWidget *widget;
+
+  widget =
+      GTK_WIDGET (gtk_builder_get_object
+                  (builder, "namespace_selector_treeview"));
+  if (!widget)
+    return FALSE;
+
+  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
+  model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
+  if (!selection || !model)
+    return FALSE;
+
+  selected = gtk_tree_selection_get_selected_rows (selection, NULL);
+  if (!selected)
+    return FALSE;
+  if (selected->data == NULL)
+  {
+    g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL);
+    g_list_free (selected);
+    return FALSE;
+  }
+  /* Free everything except the first path, keep it */
+  treepath = (GtkTreePath *) selected->data;
+  selected = g_list_remove (selected, selected->data);
+  g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL);
+  g_list_free (selected);
+
+  if (p_iter && !gtk_tree_model_get_iter (model, p_iter, treepath))
+  {
+    gtk_tree_path_free (treepath);
+    return FALSE;
+  }
+  *p_treepath = treepath;
+  if (p_model)
+    *p_model = model;
+  if (p_widget)
+    *p_widget = widget;
+  return TRUE;
+}
+
+void
+namespace_selector_treeview_cursor_changed_cb (GtkWidget * widget,
+                                               gpointer user_data)
+{
+  GtkBuilder *builder;
+  GtkToggleButton *toggle_button;
+  GtkLabel *sel_namespace_label;
+  GtkTreeModel *model;
+  gchar *value;
+  GtkTreePath *treepath;
+  GtkEntry *search_entry;
+  GtkTreeRowReference *ref, *old;
+
+  builder = GTK_BUILDER (user_data);
+
+  toggle_button =
+      GTK_TOGGLE_BUTTON (gtk_builder_get_object
+                         (builder,
+                          "main_window_search_namespace_dropdown_button"));
+  if (!toggle_button)
+    return;
+
+  search_entry =
+      GTK_ENTRY (gtk_builder_get_object (builder, "main_window_search_entry"));
+  if (!search_entry)
+    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;
+
+  if (GNUNET_GTK_get_tree_string (GTK_TREE_VIEW (widget), treepath, 0, &value)
+      && value != NULL)
+  {
+    gtk_label_set_text (sel_namespace_label, value);
+    g_free (value);
+  }
+  if (GNUNET_GTK_get_tree_string (GTK_TREE_VIEW (widget), treepath, 2, &value)
+      && value != NULL)
+  {
+    gtk_entry_set_text (search_entry, value);
+    g_free (value);
+  }
+
+  gtk_tree_path_free (treepath);
+
+  /* This will eventually hide the namespace selector */
+  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;
+}
+
+
+
+/* end of gnunet-fs-gtk-main_window_namespace.c */

Modified: gnunet-gtk/src/fs/gnunet-fs-gtk.c
===================================================================
--- gnunet-gtk/src/fs/gnunet-fs-gtk.c   2012-02-01 17:11:35 UTC (rev 19604)
+++ gnunet-gtk/src/fs/gnunet-fs-gtk.c   2012-02-01 17:27:02 UTC (rev 19605)
@@ -25,6 +25,7 @@
  */
 #include "gnunet-fs-gtk-common.h"
 #include "gnunet-fs-gtk-event_handler.h"
+#include "gnunet-fs-gtk-anonymity_spin_buttons.h"
 #include <gdk/gdkkeysyms.h>
 
 /**
@@ -97,6 +98,9 @@
 /**
  * Task run on shutdown.
  * FIXME: does this need to be a separate task!?
+ *
+ * @param cls NULL
+ * @param tc scheduler context, unused
  */
 static void
 shutdown_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
@@ -124,421 +128,8 @@
 }
 
 
-void
-main_window_search_namespace_dropdown_button_toggled_cb (GtkToggleButton *
-                                                         togglebutton,
-                                                         gpointer user_data)
-{
-  gboolean active;
-  GtkBuilder *builder = GTK_BUILDER (user_data);
-  GtkWidget *namespace_selector_window;
-  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)
-  {
-    GtkAllocation togglebutton_allocation;
-    GdkWindow *main_window_gdk;
-    gint mwg_x, mwg_y, tgb_x, tgb_y, popup_x, popup_y;
-
-    gtk_widget_get_allocation (GTK_WIDGET (togglebutton),
-                               &togglebutton_allocation);
-
-    main_window_gdk = gtk_widget_get_window (GTK_WIDGET (togglebutton));
-
-    gdk_window_get_origin (main_window_gdk, &mwg_x, &mwg_y);
-
-    /* FIXME: this might become a problem in other window managers,
-     * where reference point is not in the top-left corner.
-     * We want to show the window below the button.
-     */
-    tgb_x = mwg_x + togglebutton_allocation.x;
-    tgb_y = mwg_y + togglebutton_allocation.y;
-    popup_x = tgb_x;
-    popup_y = tgb_y + togglebutton_allocation.height;
-
-    gtk_window_move (GTK_WINDOW (namespace_selector_window), popup_x, popup_y);
-
-    gtk_widget_show_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
-namespace_selector_window_leave_timeout_cb (gpointer user_data)
-{
-  GtkToggleButton *toggle_button = GTK_TOGGLE_BUTTON (user_data);
-
-  /* This will eventually hide the namespace selector */
-  gtk_toggle_button_set_active (toggle_button, FALSE);
-  return FALSE;
-}
-
-gboolean
-main_window_search_namespace_dropdown_button_enter_notify_event_cb (GtkWidget *
-                                                                    widget,
-                                                                    GdkEvent *
-                                                                    event,
-                                                                    gpointer
-                                                                    user_data)
-{
-  if (namespace_selector_window_leave_timeout_source > 0)
-    g_source_remove (namespace_selector_window_leave_timeout_source);
-  return FALSE;
-}
-
-
-gboolean
-namespace_selector_window_leave_notify_event_cb (GtkWidget * widget,
-                                                 GdkEvent * event,
-                                                 gpointer user_data)
-{
-  GtkBuilder *builder;
-  GtkToggleButton *toggle_button;
-  guint timeout_id;
-
-  builder = GTK_BUILDER (user_data);
-
-  toggle_button =
-      GTK_TOGGLE_BUTTON (gtk_builder_get_object
-                         (builder,
-                          "main_window_search_namespace_dropdown_button"));
-
-  /* Place a timeout to hide the window. It will be cancelled if the cursor
-   * enters the namespace selector window or the toggle button within 100ms.
-   */
-  timeout_id =
-      g_timeout_add (100, &namespace_selector_window_leave_timeout_cb,
-                     toggle_button);
-  if (namespace_selector_window_leave_timeout_source > 0)
-    g_source_remove (namespace_selector_window_leave_timeout_source);
-  namespace_selector_window_leave_timeout_source = timeout_id;
-
-  return FALSE;
-}
-
-gboolean
-GNUNET_GTK_get_tree_string (GtkTreeView * treeview, GtkTreePath * treepath,
-                            guint column, gchar ** value)
-{
-  gboolean ok;
-  GtkTreeModel *model;
-
-  model = gtk_tree_view_get_model (treeview);
-  if (!model)
-    return FALSE;
-
-  GtkTreeIter iter;
-
-  ok = gtk_tree_model_get_iter (model, &iter, treepath);
-  if (!ok)
-    return FALSE;
-
-  *value = NULL;
-  gtk_tree_model_get (model, &iter, column, value, -1);
-  if (*value == NULL)
-    return FALSE;
-  return TRUE;
-}
-
-gboolean
-GNUNET_GTK_get_selected_anonymity_level (GtkBuilder * builder,
-                                         gchar * combo_name, guint * p_level)
-{
-  GtkComboBox *combo;
-  GtkTreeIter iter;
-  GtkTreeModel *model;
-  guint level;
-
-  combo = GTK_COMBO_BOX (gtk_builder_get_object (builder, combo_name));
-  if (!combo)
-    return FALSE;
-
-  if (!gtk_combo_box_get_active_iter (combo, &iter))
-    return FALSE;
-
-  model = gtk_combo_box_get_model (combo);
-  if (!model)
-    return FALSE;
-
-  gtk_tree_model_get (model, &iter, 1, &level, -1);
-  if (p_level)
-    *p_level = level;
-  return TRUE;
-}
-
-gboolean
-GNUNET_GTK_get_selected_anonymity_combo_level (GtkComboBox *combo, guint 
*p_level)
-{
-  GtkTreeIter iter;
-  GtkTreeModel *model;
-  guint level;
-
-  if (!gtk_combo_box_get_active_iter (combo, &iter))
-    return FALSE;
-
-  model = gtk_combo_box_get_model (combo);
-  if (!model)
-    return FALSE;
-
-  gtk_tree_model_get (model, &iter, 1, &level, -1);
-  if (p_level)
-    *p_level = level;
-  return TRUE;
-}
-
-gboolean
-GNUNET_GTK_select_anonymity_level (GtkBuilder * builder, gchar * combo_name,
-                                   guint sel_level)
-{
-  GtkComboBox *combo;
-  GtkTreeIter iter;
-  GtkTreeModel *model;
-  guint level;
-  gboolean go_on;
-
-  combo = GTK_COMBO_BOX (gtk_builder_get_object (builder, combo_name));
-  if (!combo)
-    return FALSE;
-
-  model = gtk_combo_box_get_model (combo);
-  if (!model)
-    return FALSE;
-
-  for (go_on = gtk_tree_model_get_iter_first (model, &iter); go_on;
-       go_on = gtk_tree_model_iter_next (model, &iter))
-  {
-    gtk_tree_model_get (model, &iter, 1, &level, -1);
-    if (level == sel_level)
-    {
-      gtk_combo_box_set_active_iter (combo, &iter);
-      return TRUE;
-    }
-  }
-  return FALSE;
-}
-
-gboolean
-GNUNET_GTK_select_anonymity_combo_level (GtkComboBox *combo, guint sel_level)
-{
-  GtkTreeIter iter;
-  GtkTreeModel *model;
-  guint level;
-  gboolean go_on;
-
-  model = gtk_combo_box_get_model (combo);
-  if (!model)
-    return FALSE;
-
-  for (go_on = gtk_tree_model_get_iter_first (model, &iter); go_on;
-       go_on = gtk_tree_model_iter_next (model, &iter))
-  {
-    gtk_tree_model_get (model, &iter, 1, &level, -1);
-    if (level == sel_level)
-    {
-      gtk_combo_box_set_active_iter (combo, &iter);
-      return TRUE;
-    }
-  }
-  return FALSE;
-}
-
-gboolean
-get_selected_namespace_treepath_iter_model_widget (GtkBuilder * builder,
-                                                   GtkTreePath ** p_treepath,
-                                                   GtkTreeIter * p_iter,
-                                                   GtkTreeModel ** p_model,
-                                                   GtkWidget ** p_widget)
-{
-  GtkTreeSelection *selection;
-  GtkTreeModel *model;
-  GList *selected;
-  GtkTreePath *treepath;
-  GtkWidget *widget;
-
-  widget =
-      GTK_WIDGET (gtk_builder_get_object
-                  (builder, "namespace_selector_treeview"));
-  if (!widget)
-    return FALSE;
-
-  selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (widget));
-  model = gtk_tree_view_get_model (GTK_TREE_VIEW (widget));
-  if (!selection || !model)
-    return FALSE;
-
-  selected = gtk_tree_selection_get_selected_rows (selection, NULL);
-  if (!selected)
-    return FALSE;
-  if (selected->data == NULL)
-  {
-    g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL);
-    g_list_free (selected);
-    return FALSE;
-  }
-  /* Free everything except the first path, keep it */
-  treepath = (GtkTreePath *) selected->data;
-  selected = g_list_remove (selected, selected->data);
-  g_list_foreach (selected, (GFunc) gtk_tree_path_free, NULL);
-  g_list_free (selected);
-
-  if (p_iter && !gtk_tree_model_get_iter (model, p_iter, treepath))
-  {
-    gtk_tree_path_free (treepath);
-    return FALSE;
-  }
-  *p_treepath = treepath;
-  if (p_model)
-    *p_model = model;
-  if (p_widget)
-    *p_widget = widget;
-  return TRUE;
-}
-
 void
-namespace_selector_treeview_cursor_changed_cb (GtkWidget * widget,
-                                               gpointer user_data)
-{
-  GtkBuilder *builder;
-  GtkToggleButton *toggle_button;
-  GtkLabel *sel_namespace_label;
-  GtkTreeModel *model;
-  gchar *value;
-  GtkTreePath *treepath;
-  GtkEntry *search_entry;
-  GtkTreeRowReference *ref, *old;
-
-  builder = GTK_BUILDER (user_data);
-
-  toggle_button =
-      GTK_TOGGLE_BUTTON (gtk_builder_get_object
-                         (builder,
-                          "main_window_search_namespace_dropdown_button"));
-  if (!toggle_button)
-    return;
-
-  search_entry =
-      GTK_ENTRY (gtk_builder_get_object (builder, "main_window_search_entry"));
-  if (!search_entry)
-    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;
-
-  if (GNUNET_GTK_get_tree_string (GTK_TREE_VIEW (widget), treepath, 0, &value)
-      && value != NULL)
-  {
-    gtk_label_set_text (sel_namespace_label, value);
-    g_free (value);
-  }
-  if (GNUNET_GTK_get_tree_string (GTK_TREE_VIEW (widget), treepath, 2, &value)
-      && value != NULL)
-  {
-    gtk_entry_set_text (search_entry, value);
-    g_free (value);
-  }
-
-  gtk_tree_path_free (treepath);
-
-  /* This will eventually hide the namespace selector */
-  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)
 {
   GtkBuilder *builder;

Modified: gnunet-gtk/src/include/gnunet_gtk.h
===================================================================
--- gnunet-gtk/src/include/gnunet_gtk.h 2012-02-01 17:11:35 UTC (rev 19604)
+++ gnunet-gtk/src/include/gnunet_gtk.h 2012-02-01 17:27:02 UTC (rev 19605)
@@ -105,6 +105,19 @@
 GNUNET_GTK_display_about (const char *dialogfile);
 
 
+/**
+ * Obtain a string from a GtkTreeView's model.
+ *
+ * @param treeview treeview to inspect
+ * @param treepath path that identifies the item
+ * @param column number of the column with the string
+ * @param value where to store the string
+ * @return TRUE on success, FALSE on errors
+ */
+gboolean
+GNUNET_GTK_get_tree_string (GtkTreeView *treeview, 
+                           GtkTreePath *treepath,
+                            guint column, gchar ** value);
 
 /**
  * Create our tray icon.

Modified: gnunet-gtk/src/lib/glade.c
===================================================================
--- gnunet-gtk/src/lib/glade.c  2012-02-01 17:11:35 UTC (rev 19604)
+++ gnunet-gtk/src/lib/glade.c  2012-02-01 17:27:02 UTC (rev 19605)
@@ -59,6 +59,40 @@
 
 
 /**
+ * Obtain a string from a GtkTreeView's model.
+ *
+ * @param treeview treeview to inspect
+ * @param treepath path that identifies the item
+ * @param column number of the column with the string
+ * @param value where to store the string
+ * @return TRUE on success, FALSE on errors
+ */
+gboolean
+GNUNET_GTK_get_tree_string (GtkTreeView * treeview, GtkTreePath * treepath,
+                            guint column, gchar ** value)
+{
+  gboolean ok;
+  GtkTreeModel *model;
+
+  model = gtk_tree_view_get_model (treeview);
+  if (!model)
+    return FALSE;
+
+  GtkTreeIter iter;
+
+  ok = gtk_tree_model_get_iter (model, &iter, treepath);
+  if (!ok)
+    return FALSE;
+
+  *value = NULL;
+  gtk_tree_model_get (model, &iter, column, value, -1);
+  if (*value == NULL)
+    return FALSE;
+  return TRUE;
+}
+
+
+/**
  * Create an initialize a new builder based on the
  * GNUnet-GTK glade file.
  *




reply via email to

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