[Top][All Lists]
[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.
*
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [GNUnet-SVN] r19605 - in gnunet-gtk/src: fs include lib,
gnunet <=