rpms/gdm/devel gdm-2.6.0.8-fix-halt-command.patch, NONE, 1.1 gdm-2.6.0.8-process-all-messages.patch, NONE, 1.1 gdm.spec, 1.78, 1.79
fedora-cvs-commits at redhat.com
fedora-cvs-commits at redhat.com
Thu Apr 28 20:44:54 UTC 2005
Author: rstrode
Update of /cvs/dist/rpms/gdm/devel
In directory cvs.devel.redhat.com:/tmp/cvs-serv29292
Modified Files:
gdm.spec
Added Files:
gdm-2.6.0.8-fix-halt-command.patch
gdm-2.6.0.8-process-all-messages.patch
Log Message:
- Fix halt command (bug 156299)
- Process all messages sent to the greeter in a read, not just
the first
gdm-2.6.0.8-fix-halt-command.patch:
gdm.h | 2 +-
1 files changed, 1 insertion(+), 1 deletion(-)
--- NEW FILE gdm-2.6.0.8-fix-halt-command.patch ---
--- gdm-2.6.0.8/daemon/gdm.h.fix-halt-command 2005-04-28 10:50:38.000000000 -0400
+++ gdm-2.6.0.8/daemon/gdm.h 2005-04-28 10:50:10.000000000 -0400
@@ -136,7 +136,7 @@ enum {
#define GDM_KEY_ADD_GTK_MODULES "daemon/AddGtkModules=false"
#define GDM_KEY_GTK_MODULES_LIST "daemon/GtkModulesList="
#define GDM_KEY_GROUP "daemon/Group=gdm"
-#define GDM_KEY_HALT "daemon/DefaultPath=" HALT_COMMAND
+#define GDM_KEY_HALT "daemon/HaltCommand=" HALT_COMMAND
#define GDM_KEY_INITDIR "daemon/DisplayInitDir=" EXPANDED_SYSCONFDIR "/gdm/Init"
#define GDM_KEY_KILLIC "daemon/KillInitClients=true"
#define GDM_KEY_LOGDIR "daemon/LogDir=" EXPANDED_LOGDIR
gdm-2.6.0.8-process-all-messages.patch:
greeter.c | 1042 +++++++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 700 insertions(+), 342 deletions(-)
--- NEW FILE gdm-2.6.0.8-process-all-messages.patch ---
Note this patch needs to be refactored.
It contains too much repetitive code.
--- gdm-2.6.0.8/gui/greeter/greeter.c.process-all-messages 2005-04-28 15:42:20.000000000 -0400
+++ gdm-2.6.0.8/gui/greeter/greeter.c 2005-04-28 15:42:31.000000000 -0400
@@ -226,362 +226,720 @@ greeter_parse_config (void)
}
}
-static gboolean
-greeter_ctrl_handler (GIOChannel *source,
- GIOCondition cond,
- gint fd)
+static void
+greeter_ctrl_handle_messages (const gchar *messages)
{
- gchar buf[PIPE_SIZE];
- gsize len;
GtkWidget *dlg;
- char *tmp;
+ const gchar *p, *q;
char *session;
+ char *tmp;
+ gchar *args;
+ gint length;
GreeterItemInfo *conversation_info;
static GnomeCanvasItem *disabled_cover = NULL;
- gchar *language;
-
- /* If this is not incoming i/o then return */
- if (cond != G_IO_IN)
- return TRUE;
-
- /* Read random garbage from i/o channel until STX is found */
- do {
- g_io_channel_read_chars (source, buf, 1, &len, NULL);
-
- if (len != 1)
- return TRUE;
- } while (buf[0] && buf[0] != STX);
-
- /* Read opcode */
- g_io_channel_read_chars (source, buf, 1, &len, NULL);
-
- /* If opcode couldn't be read */
- if (len != 1)
- return TRUE;
-
- /* Parse opcode */
- switch (buf[0]) {
- case GDM_SETLOGIN:
- /* somebody is trying to fool us this is the user that
- * wants to log in, and well, we are the gullible kind */
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
- buf[len-1] = '\0';
-
- greeter_item_pam_set_user (buf);
- if (ve_string_empty (buf))
- greeter_item_ulist_enable ();
- else
- greeter_item_ulist_disable ();
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_PROMPT:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
- buf[len-1] = '\0';
-
- tmp = ve_locale_to_utf8 (buf);
- if (tmp != NULL && strcmp (tmp, _("Username:")) == 0) {
- gdm_common_login_sound ();
- greeter_probably_login_prompt = TRUE;
- } else {
- greeter_probably_login_prompt = FALSE;
- }
- greeter_item_pam_prompt (tmp, 128, TRUE);
- g_free (tmp);
- break;
-
- case GDM_NOECHO:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
- buf[len-1] = '\0';
-
- tmp = ve_locale_to_utf8 (buf);
- greeter_item_pam_prompt (tmp, 128, FALSE);
- g_free (tmp);
- break;
-
- case GDM_MSG:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
- buf[len-1] = '\0';
- tmp = ve_locale_to_utf8 (buf);
- greeter_item_pam_message (tmp);
- g_free (tmp);
- printf ("%c\n", STX);
- fflush (stdout);
-
- break;
-
- case GDM_ERRBOX:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
- buf[len-1] = '\0';
-
- tmp = ve_locale_to_utf8 (buf);
- greeter_item_pam_error (tmp);
- g_free (tmp);
-
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_ERRDLG:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL);
- buf[len-1] = '\0';
-
- /* we should be now fine for focusing new windows */
- gdm_wm_focus_new_windows (TRUE);
-
- tmp = ve_locale_to_utf8 (buf);
- dlg = ve_hig_dialog_new (NULL /* parent */,
- GTK_DIALOG_MODAL /* flags */,
- GTK_MESSAGE_ERROR,
- GTK_BUTTONS_OK,
- FALSE /* markup */,
- tmp,
- /* avoid warning */ "%s", "");
- g_free (tmp);
-
- gdm_wm_center_window (GTK_WINDOW (dlg));
-
- gdm_wm_no_login_focus_push ();
- gtk_dialog_run (GTK_DIALOG (dlg));
- gtk_widget_destroy (dlg);
- gdm_wm_no_login_focus_pop ();
-
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_SESS:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
- buf[len-1] = '\0';
-
- tmp = ve_locale_to_utf8 (buf);
- session = greeter_session_lookup (tmp);
- g_free (tmp);
- tmp = ve_locale_from_utf8 (session);
- printf ("%c%s\n", STX, tmp);
- fflush (stdout);
- g_free (session);
- g_free (tmp);
- break;
-
- case GDM_LANG:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
- buf[len-1] = '\0';
- language = greeter_language_get_language (buf);
- printf ("%c%s\n", STX, language);
- fflush (stdout);
- g_free (language);
- break;
-
- case GDM_SSESS:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
- if (greeter_save_session ())
- printf ("%cY\n", STX);
- else
- printf ("%c\n", STX);
- fflush (stdout);
-
- break;
-
- case GDM_SLANG:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
- if (greeter_language_get_save_language ())
- printf ("%cY\n", STX);
- else
- printf ("%c\n", STX);
- fflush (stdout);
-
- break;
-
- case GDM_RESET:
- /* fall thru to reset */
-
- case GDM_RESETOK:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
- buf[len-1] = '\0';
-
- conversation_info = greeter_lookup_id ("pam-conversation");
-
- if (conversation_info)
- {
- tmp = ve_locale_to_utf8 (buf);
- g_object_set (G_OBJECT (conversation_info->item),
- "text", tmp,
- NULL);
- g_free (tmp);
- }
-
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_QUIT:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
- greeter_item_timed_stop ();
-
- if (require_quarter) {
- /* we should be now fine for focusing new windows */
- gdm_wm_focus_new_windows (TRUE);
-
- dlg = ve_hig_dialog_new (NULL /* parent */,
- GTK_DIALOG_MODAL /* flags */,
- GTK_MESSAGE_INFO,
- GTK_BUTTONS_OK,
- FALSE /* markup */,
- /* translators: This is a nice and evil eggie text, translate
- * to your favourite currency */
- _("Please insert 25 cents "
- "to log in."),
- /* avoid warning */ "%s", "");
- gdm_wm_center_window (GTK_WINDOW (dlg));
-
- gdm_wm_no_login_focus_push ();
- gtk_dialog_run (GTK_DIALOG (dlg));
- gtk_widget_destroy (dlg);
- gdm_wm_no_login_focus_pop ();
- }
-
- greeter_item_pam_leftover_messages ();
-
- gdk_flush ();
-
- printf ("%c\n", STX);
- fflush (stdout);
-
- /* screw gtk_main_quit, we want to make sure we definately die */
- _exit (EXIT_SUCCESS);
- break;
-
- case GDM_STARTTIMER:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
- greeter_item_timed_start ();
-
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_STOPTIMER:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
- greeter_item_timed_stop ();
-
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_STARTTHROBBER:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
- greeter_item_throbber_start (len > 1);
-
- printf ("%c\n", STX);
- fflush (stdout);
- break;
+ gchar *language, opcode;
+ gint message_count = 0;
+
+ for (p = messages; *p != '\0'; p++) {
- case GDM_STOPTHROBBER:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
+ while (*p != '\0' && *p != STX)
+ p++;
- greeter_item_throbber_stop ();
+ if (*p == '\0')
+ goto out;
- printf ("%c\n", STX);
- fflush (stdout);
- break;
+ p++;
+
+ if (*p == '\0')
+ goto out;
+
+ args = "";
+ opcode = *p;
+ message_count++;
+ /* Parse opcode */
+ switch (opcode) {
+ case GDM_SETLOGIN:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ greeter_item_pam_set_user (args);
+ if (ve_string_empty (args))
+ greeter_item_ulist_enable ();
+ else
+ greeter_item_ulist_disable ();
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_PROMPT:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ tmp = ve_locale_to_utf8 (args);
+ if (tmp != NULL && strcmp (tmp, _("Username:")) == 0) {
+ gdm_common_login_sound ();
+ greeter_probably_login_prompt = TRUE;
+ } else {
+ greeter_probably_login_prompt = FALSE;
+ }
+ greeter_item_pam_prompt (tmp, 128, TRUE);
+ g_free (tmp);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_NOECHO:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ tmp = ve_locale_to_utf8 (args);
+ greeter_item_pam_prompt (tmp, 128, FALSE);
+ g_free (tmp);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_MSG:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ tmp = ve_locale_to_utf8 (args);
+ greeter_item_pam_message (tmp);
+ g_free (tmp);
+ printf ("%c\n", STX);
+ fflush (stdout);
+
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_ERRBOX:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ tmp = ve_locale_to_utf8 (args);
+ greeter_item_pam_error (tmp);
+ g_free (tmp);
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_ERRDLG:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ /* we should be now fine for focusing new windows */
+ gdm_wm_focus_new_windows (TRUE);
+
+ tmp = ve_locale_to_utf8 (args);
+ dlg = ve_hig_dialog_new (NULL /* parent */,
+ GTK_DIALOG_MODAL /* flags */,
+ GTK_MESSAGE_ERROR,
+ GTK_BUTTONS_OK,
+ FALSE /* markup */,
+ tmp,
+ /* avoid warning */ "%s", "");
+ g_free (tmp);
+
+ gdm_wm_center_window (GTK_WINDOW (dlg));
+
+ gdm_wm_no_login_focus_push ();
+ gtk_dialog_run (GTK_DIALOG (dlg));
+ gtk_widget_destroy (dlg);
+ gdm_wm_no_login_focus_pop ();
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_SESS:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ tmp = ve_locale_to_utf8 (args);
+ session = greeter_session_lookup (tmp);
+ g_free (tmp);
+ tmp = ve_locale_from_utf8 (session);
+ printf ("%c%s\n", STX, tmp);
+ fflush (stdout);
+ g_free (session);
+ g_free (tmp);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_LANG:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ language = greeter_language_get_language (args);
+ printf ("%c%s\n", STX, language);
+ fflush (stdout);
+ g_free (language);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_SSESS:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ if (greeter_save_session ())
+ printf ("%cY\n", STX);
+ else
+ printf ("%c\n", STX);
+ fflush (stdout);
+
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_SLANG:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ if (greeter_language_get_save_language ())
+ printf ("%cY\n", STX);
+ else
+ printf ("%c\n", STX);
+ fflush (stdout);
+
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_RESET:
+ /* fall thru to reset */
+
+ case GDM_RESETOK:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ conversation_info = greeter_lookup_id ("pam-conversation");
+
+ if (conversation_info)
+ {
+ tmp = ve_locale_to_utf8 (args);
+ g_object_set (G_OBJECT (conversation_info->item),
+ "text", tmp,
+ NULL);
+ g_free (tmp);
+ }
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_QUIT:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ greeter_item_timed_stop ();
+
+ if (require_quarter) {
+ /* we should be now fine for focusing new windows */
+ gdm_wm_focus_new_windows (TRUE);
+
+ dlg = ve_hig_dialog_new (NULL /* parent */,
+ GTK_DIALOG_MODAL /* flags */,
+ GTK_MESSAGE_INFO,
+ GTK_BUTTONS_OK,
+ FALSE /* markup */,
+ /* translators: This is a nice and evil eggie text, translate
+ * to your favourite currency */
+ _("Please insert 25 cents "
+ "to log in."),
+ /* avoid warning */ "%s", "");
+ gdm_wm_center_window (GTK_WINDOW (dlg));
+
+ gdm_wm_no_login_focus_push ();
+ gtk_dialog_run (GTK_DIALOG (dlg));
+ gtk_widget_destroy (dlg);
+ gdm_wm_no_login_focus_pop ();
+ }
+
+ greeter_item_pam_leftover_messages ();
+
+ gdk_flush ();
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+
+ /* screw gtk_main_quit, we want to make sure we definately die */
+ _exit (EXIT_SUCCESS);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_STARTTIMER:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ greeter_item_timed_start ();
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_STOPTIMER:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ greeter_item_timed_stop ();
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_STARTTHROBBER:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ greeter_item_throbber_start (length > 1);
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_STOPTHROBBER:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ greeter_item_throbber_stop ();
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_DISABLE:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ gtk_widget_set_sensitive (window, FALSE);
+
+ if (disabled_cover == NULL)
+ {
+ disabled_cover = gnome_canvas_item_new
+ (gnome_canvas_root (GNOME_CANVAS (canvas)),
+ GNOME_TYPE_CANVAS_RECT,
+ "x1", 0.0,
+ "y1", 0.0,
+ "x2", (double)canvas->allocation.width,
+ "y2", (double)canvas->allocation.height,
+ "fill_color_rgba", (guint)0x00000088,
+ NULL);
+ }
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_ENABLE:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ gtk_widget_set_sensitive (window, TRUE);
+
+ if (disabled_cover != NULL)
+ {
+ gtk_object_destroy (GTK_OBJECT (disabled_cover));
+ disabled_cover = NULL;
+ }
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ /* These are handled separately so ignore them here and send
+ * back a NULL response so that the daemon quits sending them */
+ case GDM_NEEDPIC:
+ case GDM_READPIC:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_NOFOCUS:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ gdm_wm_no_login_focus_push ();
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_FOCUS:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ gdm_wm_no_login_focus_pop ();
+
+ printf ("%c\n", STX);
+ fflush (stdout);
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ case GDM_SAVEDIE:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+
+ /* Set busy cursor */
+ gdm_common_setup_cursor (GDK_WATCH);
+
+ gdm_wm_save_wm_order ();
+
+ gdk_flush ();
+
+ _exit (EXIT_SUCCESS);
+
+ case GDM_QUERY_CAPSLOCK:
+ p++;
+ q = p;
+ while (*q >= ' ')
+ q++;
+
+ length = q - p;
+
+ if (length > 0)
+ args = g_strndup (p, length);
+ else
+ args = g_strdup ("");
+ p = q;
+
+ if (greeter_is_capslock_on ())
+ printf ("%cY\n", STX);
+ else
+ printf ("%c\n", STX);
+ fflush (stdout);
+
+ syslog (LOG_ERR, "args for opcode '%c' are '%s'\n", opcode, args);
+ g_free (args);
+ if (*p == '\0')
+ goto out;
+ break;
+
+ default:
+ gdm_common_abort ("Unexpected greeter command received: '%c'", opcode);
+ break;
+ }
+ }
- case GDM_DISABLE:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
- gtk_widget_set_sensitive (window, FALSE);
+out:
+ syslog (LOG_ERR, "processed %d messages\n", message_count);
+}
- if (disabled_cover == NULL)
- {
- disabled_cover = gnome_canvas_item_new
- (gnome_canvas_root (GNOME_CANVAS (canvas)),
- GNOME_TYPE_CANVAS_RECT,
- "x1", 0.0,
- "y1", 0.0,
- "x2", (double)canvas->allocation.width,
- "y2", (double)canvas->allocation.height,
- "fill_color_rgba", (guint)0x00000088,
- NULL);
- }
+static gboolean
+greeter_ctrl_handler (GIOChannel *source,
+ GIOCondition cond,
+ gint fd)
+{
+ gchar buf[PIPE_SIZE];
+ gsize len;
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_ENABLE:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
- gtk_widget_set_sensitive (window, TRUE);
+ /* If this is not incoming i/o then return */
+ if (cond != G_IO_IN)
+ return TRUE;
- if (disabled_cover != NULL)
- {
- gtk_object_destroy (GTK_OBJECT (disabled_cover));
- disabled_cover = NULL;
- }
+ buf[0] = '\0';
+ if (g_io_channel_read_chars (source, buf, PIPE_SIZE -1, &len, NULL)
+ != G_IO_STATUS_NORMAL)
+ return TRUE;
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- /* These are handled separately so ignore them here and send
- * back a NULL response so that the daemon quits sending them */
- case GDM_NEEDPIC:
- case GDM_READPIC:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_NOFOCUS:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
- gdm_wm_no_login_focus_push ();
-
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_FOCUS:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
- gdm_wm_no_login_focus_pop ();
-
- printf ("%c\n", STX);
- fflush (stdout);
- break;
-
- case GDM_SAVEDIE:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
- /* Set busy cursor */
- gdm_common_setup_cursor (GDK_WATCH);
-
- gdm_wm_save_wm_order ();
-
- gdk_flush ();
-
- _exit (EXIT_SUCCESS);
-
- case GDM_QUERY_CAPSLOCK:
- g_io_channel_read_chars (source, buf, PIPE_SIZE-1, &len, NULL); /* Empty */
-
- if (greeter_is_capslock_on ())
- printf ("%cY\n", STX);
- else
- printf ("%c\n", STX);
- fflush (stdout);
-
- break;
-
- default:
- gdm_common_abort ("Unexpected greeter command received: '%c'", buf[0]);
- break;
- }
+ greeter_ctrl_handle_messages (buf);
- return (TRUE);
+ return TRUE;
}
static gboolean
Index: gdm.spec
===================================================================
RCS file: /cvs/dist/rpms/gdm/devel/gdm.spec,v
retrieving revision 1.78
retrieving revision 1.79
diff -u -r1.78 -r1.79
--- gdm.spec 27 Apr 2005 04:26:58 -0000 1.78
+++ gdm.spec 28 Apr 2005 20:44:51 -0000 1.79
@@ -16,7 +16,7 @@
Summary: The GNOME Display Manager.
Name: gdm
Version: 2.6.0.8
-Release: 10
+Release: 11
Epoch: 1
License: LGPL/GPL
Group: User Interface/X
@@ -44,6 +44,8 @@
Patch26: gdm-2.6.0.8-boot-throbber.patch
Patch27: gdm-2.6.0.8-dont-malloc-in-signal-handlers.patch
Patch28: gdm-2.6.0.8-xdmcp.patch
+Patch29: gdm-2.6.0.8-fix-halt-command.patch
+Patch30: gdm-2.6.0.8-process-all-messages.patch
BuildRoot: %{_tmppath}/gdm-%{PACKAGE_VERSION}-root
@@ -113,6 +115,8 @@
%patch26 -p1 -b .boot-throbber
%patch27 -p1 -b .dont-malloc-in-signal-handlers
%patch28 -p1 -b .xdmcp
+%patch29 -p1 -b .fix-halt-command
+%patch30 -p1 -b .process-all-messages
# fix the time format for ja
perl -pi -e "s|^msgstr \"%a %b %d, %H:%M\"|msgstr \"%m/%d \(%a\) %H:%M\"|; s|^msgstr \"%a %b %d, %I:%M %p\"|msgstr \"%m/%d \(%a\) %p %I:%M\"|" po/ja.po
@@ -284,6 +288,11 @@
%attr(1770, root, gdm) %dir %{_localstatedir}/gdm
%changelog
+* Thu Apr 28 2005 Ray Strode <rstrode at redhat.com> 1:2.6.0.8-11
+- Fix halt command (bug 156299)
+- Process all messages sent to the greeter in a read, not just
+ the first
+
* Wed Apr 27 2005 Jeremy Katz <katzj at redhat.com> - 1:2.6.0.8-10
- silence %%postun
More information about the fedora-cvs-commits
mailing list