Page Menu
Home
GnuPG
Search
Configure Global Search
Log In
Files
F22947883
D386.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Award Token
Size
2 KB
Subscribers
None
D386.diff
View Options
Index: b/gnome3/pinentry-gnome3.c
===================================================================
--- b/gnome3/pinentry-gnome3.c
+++ b/gnome3/pinentry-gnome3.c
@@ -390,6 +390,69 @@
pinentry_cmd_handler_t pinentry_cmd_handler = gnome3_cmd_handler;
+/* Test whether there is a GNOME screensaver running that happens to
+ * be locked. Note that if there is no GNOME screensaver running at
+ * all the answer is still FALSE */
+static gboolean
+pe_gnome_screen_locked (void)
+{
+ GDBusConnection *dbus;
+ GError *error;
+ GVariant *reply, *reply_bool;
+ gboolean ret;
+
+ dbus = g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, &error);
+
+ if (!dbus)
+ {
+ fprintf (stderr, "failed to connect to user session D-Bus (%d): %s",
+ error ? error->code : -1,
+ error ? error->message : "<no GError>");
+ if (error)
+ g_error_free (error);
+ return FALSE;
+ }
+
+ /* this is intended to be the equivalent of:
+ * dbus-send --print-reply=literal --session \
+ * --dest=org.gnome.ScreenSaver \
+ * /org/gnome/ScreenSaver \
+ * org.gnome.ScreenSaver.GetActive
+ */
+ reply = g_dbus_connection_call_sync (dbus,
+ "org.gnome.ScreenSaver",
+ "/org/gnome/ScreenSaver",
+ "org.gnome.ScreenSaver",
+ "GetActive",
+ NULL,
+ ((const GVariantType *) "(b)"),
+ G_DBUS_CALL_FLAGS_NO_AUTO_START,
+ 0,
+ NULL,
+ &error);
+ g_object_unref(dbus);
+ if (!reply)
+ {
+ fprintf (stderr, "failed to get reply (%d): %s",
+ error ? error->code : -1,
+ error ? error->message : "<no GError>");
+ if (error)
+ g_error_free (error);
+ return FALSE;
+ }
+ reply_bool = g_variant_get_child_value (reply, 0);
+ if (!reply_bool)
+ {
+ fprintf (stderr, "failed to get boolean from reply\n");
+ ret = FALSE;
+ }
+ else
+ ret = g_variant_get_boolean (reply_bool);
+
+ g_variant_unref (reply_bool);
+ g_variant_unref (reply);
+ return ret;
+}
/* Test whether we can create a system prompt or not. This briefly
* does create a system prompt, which blocks other tools from making
@@ -443,6 +506,12 @@
" falling back to curses\n");
pinentry_cmd_handler = curses_cmd_handler;
}
+ else if (pe_gnome_screen_locked ())
+ {
+ fprintf (stderr, "GNOME screensaver is locked,"
+ " falling back to curses\n");
+ pinentry_cmd_handler = curses_cmd_handler;
+ }
#endif
pinentry_parse_opts (argc, argv);
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Fri, May 9, 8:38 AM (15 h, 37 m)
Storage Engine
local-disk
Storage Format
Raw Data
Storage Handle
e3/01/508964d176db2ffbf7b838b93b35
Attached To
D386: 903_0001-gnome3-Fall-back-to-curses-if-screensaver-is-locked.patch
Event Timeline
Log In to Comment