gnunet-svn
[Top][All Lists]
Advanced

[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.



reply via email to

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