[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[taler-anastasis-gtk] branch master updated: -add logic to right-click o
From: |
gnunet |
Subject: |
[taler-anastasis-gtk] branch master updated: -add logic to right-click open TOS/PP from provider dialog |
Date: |
Wed, 29 Sep 2021 18:04:53 +0200 |
This is an automated email from the git hooks/post-receive script.
grothoff pushed a commit to branch master
in repository anastasis-gtk.
The following commit(s) were added to refs/heads/master by this push:
new 4128bba -add logic to right-click open TOS/PP from provider dialog
4128bba is described below
commit 4128bbafa716a9889ea33ca0d43cd0559cf1a4f7
Author: Christian Grothoff <christian@grothoff.org>
AuthorDate: Wed Sep 29 18:04:51 2021 +0200
-add logic to right-click open TOS/PP from provider dialog
---
contrib/anastasis_gtk_edit_providers.glade | 4 +-
...astasis-gtk_handle-auth-edit-provider-clicked.c | 205 +++++++++++++++------
2 files changed, 149 insertions(+), 60 deletions(-)
diff --git a/contrib/anastasis_gtk_edit_providers.glade
b/contrib/anastasis_gtk_edit_providers.glade
index 6f0a06b..7a8ee42 100644
--- a/contrib/anastasis_gtk_edit_providers.glade
+++ b/contrib/anastasis_gtk_edit_providers.glade
@@ -209,7 +209,9 @@ Author: Christian Grothoff
<property
name="sort-indicator">True</property>
<property
name="sort-column-id">6</property>
<child>
- <object class="GtkCellRendererToggle"
id="use_toggle"/>
+ <object class="GtkCellRendererToggle"
id="use_toggle">
+ <signal name="toggled"
handler="provider_toggle_callback" swapped="no"/>
+ </object>
<attributes>
<attribute
name="sensitive">5</attribute>
<attribute
name="activatable">5</attribute>
diff --git a/src/anastasis/anastasis-gtk_handle-auth-edit-provider-clicked.c
b/src/anastasis/anastasis-gtk_handle-auth-edit-provider-clicked.c
index fdff487..02da9d5 100644
--- a/src/anastasis/anastasis-gtk_handle-auth-edit-provider-clicked.c
+++ b/src/anastasis/anastasis-gtk_handle-auth-edit-provider-clicked.c
@@ -33,7 +33,6 @@
#include <microhttpd.h>
-
/**
* Context for menu callbacks.
*/
@@ -65,6 +64,50 @@ context_popup_selection_done (GtkMenuShell *menushell,
}
+/**
+ * Open @a url in a browser.
+ *
+ * @param url the URL to open
+ */
+static void
+xdg_open (const char *url)
+{
+ pid_t chld;
+ int status;
+
+ chld = fork ();
+ if (-1 == chld)
+ {
+ GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR,
+ "fork");
+ return;
+ }
+ if (0 == chld)
+ {
+ pid_t c2;
+
+ c2 = fork ();
+ if (-1 == c2)
+ _exit (EXIT_FAILURE);
+ if (0 != c2)
+ _exit (EXIT_SUCCESS);
+ execlp ("xdg-open",
+ "xdg-open",
+ url,
+ NULL);
+ execlp ("open",
+ "open",
+ url,
+ NULL);
+ GNUNET_log_strerror_file (GNUNET_ERROR_TYPE_ERROR,
+ "exec",
+ "open");
+ _exit (EXIT_FAILURE);
+ }
+ waitpid (chld, &status, 0);
+}
+
+
/**
* The user selected the 'view pp' menu.
*
@@ -73,11 +116,16 @@ context_popup_selection_done (GtkMenuShell *menushell,
*/
static void
view_terms_of_service (GtkMenuItem *menuitem,
- gpointer user_data)
+ gpointer user_data)
{
struct MenuContext *ctx = user_data;
- GNUNET_break (0); // FIXME: not implemented
+ char *tos;
+ GNUNET_asprintf (&tos,
+ "%sterms",
+ ctx->url);
+ xdg_open (tos);
+ GNUNET_free (tos);
}
@@ -89,12 +137,51 @@ view_terms_of_service (GtkMenuItem *menuitem,
*/
static void
view_privacy_policy (GtkMenuItem *menuitem,
- gpointer user_data)
+ gpointer user_data)
{
struct MenuContext *ctx = user_data;
+ char *pp;
+
+ GNUNET_asprintf (&pp,
+ "%sprivacy",
+ ctx->url);
+ xdg_open (pp);
+ GNUNET_free (pp);
+}
+
+void
+provider_toggle_callback (GtkCellRendererToggle *cell,
+ gchar *path_str,
+ gpointer user_data)
+{
+ GtkBuilder *builder = GTK_BUILDER (user_data);
+ GtkTreeIter iter;
+ GtkTreePath *path;
+ gboolean enabled;
+ GtkTreeModel *tm;
- GNUNET_break (0); // FIXME: not implemented
+ tm = GTK_TREE_MODEL (gtk_builder_get_object (builder,
+ "provider_liststore"));
+ if (NULL == tm)
+ {
+ GNUNET_break (0);
+ return;
+ }
+ path = gtk_tree_path_new_from_string (path_str);
+ gtk_tree_model_get_iter (tm,
+ &iter,
+ path);
+ gtk_tree_model_get (tm,
+ &iter,
+ AG_PMC_PROVIDER_ENABLED, &enabled,
+ -1);
+ enabled = ! enabled;
+ gtk_list_store_set (GTK_LIST_STORE (tm),
+ &iter,
+ AG_PMC_PROVIDER_ENABLED, enabled,
+ -1);
+ gtk_tree_path_free (path);
}
@@ -108,8 +195,8 @@ view_privacy_policy (GtkMenuItem *menuitem,
*/
gboolean
provider_tree_view_button_press_event_cb (GtkWidget *widget,
- GdkEvent *event,
- gpointer user_data)
+ GdkEvent *event,
+ gpointer user_data)
{
GtkBuilder *builder = GTK_BUILDER (user_data);
GdkEventButton *event_button = (GdkEventButton *) event;
@@ -119,7 +206,7 @@ provider_tree_view_button_press_event_cb (GtkWidget *widget,
GtkTreeIter iter;
struct MenuContext *ctx;
GtkMenu *menu;
-
+
if ((GDK_BUTTON_PRESS != event->type) ||
(3 != event_button->button))
return FALSE; /* not a right-click */
@@ -130,8 +217,8 @@ provider_tree_view_button_press_event_cb (GtkWidget *widget,
GNUNET_break (0);
return FALSE;
}
- tv = GTK_TREE_VIEW (GCG_get_main_window_object (
- "provider_tree_view"));
+ tv = GTK_TREE_VIEW (gtk_builder_get_object (builder,
+ "provider_tree_view"));
if (! gtk_tree_view_get_path_at_pos (tv,
event_button->x,
event_button->y,
@@ -144,8 +231,8 @@ provider_tree_view_button_press_event_cb (GtkWidget *widget,
return FALSE;
}
if (! gtk_tree_model_get_iter (tm,
- &iter,
- path))
+ &iter,
+ path))
{
/* not sure how we got a path but no iter... */
GNUNET_break (0);
@@ -154,49 +241,49 @@ provider_tree_view_button_press_event_cb (GtkWidget
*widget,
gtk_tree_path_free (path);
ctx = GNUNET_new (struct MenuContext);
gtk_tree_model_get (tm,
- &iter,
- AG_PMC_PROVIDER_URL, &ctx->url,
- -1);
+ &iter,
+ AG_PMC_PROVIDER_URL, &ctx->url,
+ -1);
menu = GTK_MENU (gtk_menu_new ());
{
GtkWidget *child;
child = gtk_menu_item_new_with_label (_ ("View _privacy policy..."));
g_signal_connect (child,
- "activate",
- G_CALLBACK (&view_privacy_policy),
- ctx);
+ "activate",
+ G_CALLBACK (&view_privacy_policy),
+ ctx);
gtk_label_set_use_underline (GTK_LABEL (
- gtk_bin_get_child (GTK_BIN
(child))),
- TRUE);
+ gtk_bin_get_child (GTK_BIN (child))),
+ TRUE);
gtk_widget_show (child);
gtk_menu_shell_append (GTK_MENU_SHELL (menu),
- child);
+ child);
}
{
GtkWidget *child;
- child = gtk_menu_item_new_with_label (_("View _terms of service..."));
+ child = gtk_menu_item_new_with_label (_ ("View _terms of service..."));
g_signal_connect (child,
- "activate",
- G_CALLBACK (&view_terms_of_service),
- ctx);
+ "activate",
+ G_CALLBACK (&view_terms_of_service),
+ ctx);
gtk_label_set_use_underline (GTK_LABEL (
- gtk_bin_get_child (GTK_BIN
(child))),
- TRUE);
+ gtk_bin_get_child (GTK_BIN (child))),
+ TRUE);
gtk_widget_show (child);
gtk_menu_shell_append (GTK_MENU_SHELL (menu),
- child);
+ child);
}
g_signal_connect (menu,
"selection-done",
G_CALLBACK (&context_popup_selection_done),
ctx);
-
+
gtk_menu_popup_at_pointer (menu,
event);
-
+
return FALSE;
}
@@ -226,12 +313,12 @@ url_add_button_clicked_cb (GtkButton *button,
NULL,
-1,
AG_PMC_PROVIDER_URL, url,
- AG_PMC_PROVIDER_STATUS, _("new"),
- AG_PMC_PROVIDER_STATUS_COLOR, "yellow",
- AG_PMC_PROVIDER_ENABLED, true,
- AG_PMC_PROVIDER_SENSITIVE, false,
- AG_PMC_PROVIDER_NOT_SENSITIVE, true,
- -1);
+ AG_PMC_PROVIDER_STATUS, _ ("new"),
+ AG_PMC_PROVIDER_STATUS_COLOR, "yellow",
+ AG_PMC_PROVIDER_ENABLED, true,
+ AG_PMC_PROVIDER_SENSITIVE, false,
+ AG_PMC_PROVIDER_NOT_SENSITIVE, true,
+ -1);
gtk_entry_set_text (entry,
"");
}
@@ -304,12 +391,12 @@ edit_provider_dialog_response_cb (GtkDialog *dialog,
gtk_tree_model_get (tm,
&iter,
AG_PMC_PROVIDER_URL, &url,
- AG_PMC_PROVIDER_ENABLED, &enabled,
+ AG_PMC_PROVIDER_ENABLED, &enabled,
-1);
if (NULL == json_object_get (providers,
url))
{
- // FIXME: store enabled status in JSON state!
+ // FIXME: store enabled status in JSON state!
GNUNET_assert (0 ==
json_array_append_new (urls,
json_string (url)));
@@ -375,10 +462,10 @@ anastasis_gtk_edit_provider_list_clicked_cb (GtkButton
*object,
GNUNET_JSON_spec_mark_optional (
GNUNET_JSON_spec_uint32 ("http_status",
&http_code)),
- // FIXME: check: right fieldname?
+ // FIXME: check: right fieldname?
GNUNET_JSON_spec_mark_optional (
- TALER_JSON_spec_amount_any ("liability_limit",
- &ll)),
+ TALER_JSON_spec_amount_any ("liability_limit",
+ &ll)),
GNUNET_JSON_spec_mark_optional (
GNUNET_JSON_spec_uint32 ("error_code",
&ec)),
@@ -390,8 +477,8 @@ anastasis_gtk_edit_provider_list_clicked_cb (GtkButton
*object,
const char *ll_s = NULL;
memset (&ll,
- 0,
- sizeof (ll));
+ 0,
+ sizeof (ll));
if (GNUNET_OK !=
GNUNET_JSON_parse (provider,
spec,
@@ -407,12 +494,12 @@ anastasis_gtk_edit_provider_list_clicked_cb (GtkButton
*object,
{
status = GNUNET_strdup (_ ("available"));
color = "green";
- sensitive = true;
- if (GNUNET_OK ==
- TALER_amount_is_valid (&ll))
- ll_s = TALER_amount2s (&ll);
- else
- GNUNET_break (0);
+ sensitive = true;
+ if (GNUNET_OK ==
+ TALER_amount_is_valid (&ll))
+ ll_s = TALER_amount2s (&ll);
+ else
+ GNUNET_break (0);
}
else if (0 == http_code)
{
@@ -434,16 +521,16 @@ anastasis_gtk_edit_provider_list_clicked_cb (GtkButton
*object,
}
gtk_list_store_insert_with_values (
ls,
- NULL,
- -1,
- AG_PMC_PROVIDER_URL, url,
- AG_PMC_PROVIDER_STATUS, status,
- AG_PMC_PROVIDER_STATUS_COLOR, color,
- AG_PMC_PROVIDER_LIABILITY_LIMIT, ll_s,
- AG_PMC_PROVIDER_ENABLED, sensitive, // FIXME: store active/inactive
status in JSON state!
- AG_PMC_PROVIDER_SENSITIVE, sensitive,
- AG_PMC_PROVIDER_NOT_SENSITIVE, ! sensitive,
- -1);
+ NULL,
+ -1,
+ AG_PMC_PROVIDER_URL, url,
+ AG_PMC_PROVIDER_STATUS, status,
+ AG_PMC_PROVIDER_STATUS_COLOR, color,
+ AG_PMC_PROVIDER_LIABILITY_LIMIT, ll_s,
+ AG_PMC_PROVIDER_ENABLED, sensitive, // FIXME: store active/inactive
status in JSON state!
+ AG_PMC_PROVIDER_SENSITIVE, sensitive,
+ AG_PMC_PROVIDER_NOT_SENSITIVE, ! sensitive,
+ -1);
GNUNET_free (status);
}
}
--
To stop receiving notification emails like this one, please contact
gnunet@gnunet.org.
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- [taler-anastasis-gtk] branch master updated: -add logic to right-click open TOS/PP from provider dialog,
gnunet <=