]> git.pld-linux.org Git - packages/gnome-keyring.git/commitdiff
- http://bugzilla.gnome.org/show_bug.cgi?id=331003
authorfreetz <freetz@pld-linux.org>
Thu, 1 Jun 2006 20:19:12 +0000 (20:19 +0000)
committercvs2git <feedback@pld-linux.org>
Sun, 24 Jun 2012 12:13:13 +0000 (12:13 +0000)
Changed files:
    gnome-keyring-single-unlock-dialog.patch -> 1.1

gnome-keyring-single-unlock-dialog.patch [new file with mode: 0644]

diff --git a/gnome-keyring-single-unlock-dialog.patch b/gnome-keyring-single-unlock-dialog.patch
new file mode 100644 (file)
index 0000000..2e0c9a5
--- /dev/null
@@ -0,0 +1,124 @@
+Index: gnome-keyring-daemon.c
+===================================================================
+RCS file: /cvs/gnome/gnome-keyring/gnome-keyring-daemon.c,v
+retrieving revision 1.25
+diff -u -p -u -r1.25 gnome-keyring-daemon.c
+--- gnome-keyring-daemon.c     26 Oct 2005 07:50:14 -0000      1.25
++++ gnome-keyring-daemon.c     9 May 2006 20:41:02 -0000
+@@ -2227,6 +2227,98 @@ launch_ask_helper (GnomeKeyringAsk *ask,
+       return res;
+ }
++typedef struct {
++      GnomeKeyringAsk *ask;
++      GnomeKeyringAsk *other_ask;
++      enum AskType ask_type;
++} GnomeKeyringPendingAsk;
++
++static gboolean
++check_pending_ask (gpointer user_data)
++{
++      GnomeKeyringPendingAsk *pending_ask = user_data;
++      gboolean ready_to_check = FALSE;
++      GnomeKeyring *keyring;
++
++      if (g_list_find (outstanding_asks, pending_ask->other_ask) != NULL) {
++              if (pending_ask->other_ask->ask_pid == 0)
++                      ready_to_check = TRUE;
++
++              if (pending_ask->other_ask->current_ask_type != pending_ask->ask_type)
++                      ready_to_check = TRUE;
++      } else {
++              ready_to_check = TRUE;
++      }
++
++      if (!ready_to_check)
++              return TRUE;
++
++      if (pending_ask->ask->current_request->keyring != NULL)
++              keyring = pending_ask->ask->current_request->keyring;
++      else
++              keyring = pending_ask->ask->current_request->item->keyring;
++
++      if (keyring->locked) {
++              launch_ask_helper (pending_ask->ask, pending_ask->ask_type);
++      } else {
++              /* keyring is unlocked, no need to do any asking */
++      }
++
++      gnome_keyring_ask_iterate (pending_ask->ask);
++
++      g_free (pending_ask);
++      return FALSE;
++}
++
++static gboolean
++maybe_launch_ask_helper (GnomeKeyringAsk *ask, enum AskType ask_type)
++{
++      GnomeKeyring *keyring;
++      gboolean already_asking;
++      GList *l;
++
++      if (ask->current_request->keyring != NULL)
++              keyring = ask->current_request->keyring;
++      else
++              keyring = ask->current_request->item->keyring;
++
++      already_asking = FALSE;
++
++      for (l = outstanding_asks; l != NULL; l = l->next) {
++              GnomeKeyringAsk *other_ask = l->data;
++              GnomeKeyring *other_keyring;
++
++              if (other_ask == ask)
++                      continue;
++
++              if (other_ask->current_ask_type != ask_type)
++                      continue;
++
++              if (other_ask->current_request->keyring != NULL)
++                      other_keyring = other_ask->current_request->keyring;
++              else
++                      other_keyring = other_ask->current_request->item->keyring;
++
++              if (keyring != other_keyring)
++                      continue;
++
++              if (other_ask->ask_pid != 0) {
++                      GnomeKeyringPendingAsk *pending_ask = g_new0 (GnomeKeyringPendingAsk, 1);
++
++                      printf ("Another ask helper is already running: pid %d\n", other_ask->ask_pid);
++
++                      pending_ask->ask = ask;
++                      pending_ask->other_ask = other_ask;
++                      pending_ask->ask_type = ask_type;
++                      g_timeout_add (200, check_pending_ask, pending_ask);
++
++                      return TRUE;
++              }
++      }
++
++      return launch_ask_helper (ask, ask_type);
++}
++
+ static void
+ schedule_ask (GnomeKeyringAsk *ask)
+ {
+@@ -2235,7 +2327,7 @@ schedule_ask (GnomeKeyringAsk *ask)
+       request = ask->current_request;
+       switch (request->request_type) {
+       case GNOME_KEYRING_ACCESS_REQUEST_KEYRING:
+-              if (!launch_ask_helper (ask, ASK_KEYRING_PASSWORD)) {
++              if (!maybe_launch_ask_helper (ask, ASK_KEYRING_PASSWORD)) {
+                       /* no way to allow request, denying */
+                       ask->access_requests = g_list_remove (ask->access_requests, request);
+                       gnome_keyring_access_request_free (request);
+@@ -2245,7 +2337,7 @@ schedule_ask (GnomeKeyringAsk *ask)
+               break;
+       case GNOME_KEYRING_ACCESS_REQUEST_ITEM:
+               if (request->item->keyring->locked) {
+-                      if (!launch_ask_helper (ask, ASK_KEYRING_PASSWORD)) {
++                      if (!maybe_launch_ask_helper (ask, ASK_KEYRING_PASSWORD)) {
+                               /* no way to allow request, denying */
+                               ask->access_requests = g_list_remove (ask->access_requests, request);
+                               gnome_keyring_access_request_free (request);
This page took 0.031633 seconds and 4 git commands to generate.