From d524c8e88f558b9f2aebff39b6fbe77eab51e081 Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:43:08 +0200 Subject: Adding upstream version 43.0. Signed-off-by: Daniel Baumann --- utils/gdmflexiserver.c | 179 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 utils/gdmflexiserver.c (limited to 'utils/gdmflexiserver.c') diff --git a/utils/gdmflexiserver.c b/utils/gdmflexiserver.c new file mode 100644 index 0000000..68b8ac9 --- /dev/null +++ b/utils/gdmflexiserver.c @@ -0,0 +1,179 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2008 William Jon McCann + * + * This program 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 of the License, or + * (at your option) any later version. + * + * This program 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 this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. + * + */ + +#include "config.h" + +#include +#include +#include +#include +#include + +#include + +#include "common/gdm-common.h" + +static const char *send_command = NULL; +static gboolean use_xnest = FALSE; +static gboolean no_lock = FALSE; +static gboolean debug_in = FALSE; +static gboolean authenticate = FALSE; +static gboolean startnew = FALSE; +static gboolean monte_carlo_pi = FALSE; +static gboolean show_version = FALSE; +static char **args_remaining = NULL; + +/* Keep all config options for compatibility even if they are noops */ +GOptionEntry options [] = { + { "command", 'c', 0, G_OPTION_ARG_STRING, &send_command, N_("Only the VERSION command is supported"), N_("COMMAND") }, + { "xnest", 'n', 0, G_OPTION_ARG_NONE, &use_xnest, N_("Ignored — retained for compatibility"), NULL }, + { "no-lock", 'l', 0, G_OPTION_ARG_NONE, &no_lock, N_("Ignored — retained for compatibility"), NULL }, + { "debug", 'd', 0, G_OPTION_ARG_NONE, &debug_in, N_("Debugging output"), NULL }, + { "authenticate", 'a', 0, G_OPTION_ARG_NONE, &authenticate, N_("Ignored — retained for compatibility"), NULL }, + { "startnew", 's', 0, G_OPTION_ARG_NONE, &startnew, N_("Ignored — retained for compatibility"), NULL }, + { "monte-carlo-pi", 0, 0, G_OPTION_ARG_NONE, &monte_carlo_pi, NULL, NULL }, + { "version", 0, 0, G_OPTION_ARG_NONE, &show_version, N_("Version of this application"), NULL }, + { G_OPTION_REMAINING, 0, 0, G_OPTION_ARG_STRING_ARRAY, &args_remaining, NULL, NULL }, + { NULL } +}; + +static gboolean +is_program_in_path (const char *program) +{ + char *tmp = g_find_program_in_path (program); + if (tmp != NULL) { + g_free (tmp); + return TRUE; + } else { + return FALSE; + } +} + +static void +maybe_lock_screen (void) +{ + gboolean use_gscreensaver = FALSE; + GError *error = NULL; + char *command; + + if (is_program_in_path ("gnome-screensaver-command")) { + use_gscreensaver = TRUE; + } else if (! is_program_in_path ("xscreensaver-command")) { + return; + } + + if (use_gscreensaver) { + command = g_strdup ("gnome-screensaver-command --lock"); + } else { + command = g_strdup ("xscreensaver-command -lock"); + } + + if (! g_spawn_command_line_async (command, &error)) { + g_warning ("Cannot lock screen: %s", error->message); + g_error_free (error); + } + + g_free (command); + + if (! use_gscreensaver) { + command = g_strdup ("xscreensaver-command -throttle"); + if (! g_spawn_command_line_async (command, &error)) { + g_warning ("Cannot disable screensaver engines: %s", error->message); + g_error_free (error); + } + + g_free (command); + } +} + +static void +calc_pi (void) +{ + unsigned long n = 0, h = 0; + double x, y; + printf ("\n"); + for (;;) { + x = g_random_double (); + y = g_random_double (); + if (x*x + y*y <= 1) + h++; + n++; + if ( ! (n & 0xfff)) + printf ("pi ~~ %1.10f\t(%lu/%lu * 4) iteration: %lu \r", + ((double)h)/(double)n * 4.0, h, n, n); + } +} + +int +main (int argc, char *argv[]) +{ + GOptionContext *ctx; + gboolean res; + GError *error; + + bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); + bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); + textdomain (GETTEXT_PACKAGE); + setlocale (LC_ALL, ""); + + /* Option parsing */ + ctx = g_option_context_new (_("— New GDM login")); + g_option_context_set_translation_domain (ctx, GETTEXT_PACKAGE); + g_option_context_add_main_entries (ctx, options, NULL); + g_option_context_parse (ctx, &argc, &argv, NULL); + g_option_context_free (ctx); + + + if (show_version) { + g_print ("%s %s\n", argv [0], VERSION); + exit (EXIT_FAILURE); + } + + /* don't support commands other than VERSION */ + if (send_command != NULL) { + if (strcmp (send_command, "VERSION") == 0) { + g_print ("GDM %s \n", VERSION); + return 0; + } else { + g_warning ("No longer supported"); + } + return 1; + } + + if (monte_carlo_pi) { + calc_pi (); + return 0; + } + + if (use_xnest) { + g_warning ("Not yet implemented"); + return 1; + } + + error = NULL; + res = gdm_goto_login_session (&error); + if (! res) { + g_printerr ("%s", error->message); + } else { + maybe_lock_screen (); + } + + return 1; +} -- cgit v1.2.3