--- /dev/null 2006-02-06 19:14:42.000000000 +0100 +++ gnome-session/gsm-motd.h 2006-02-03 12:30:48.000000000 +0100 @@ -0,0 +1,7 @@ +#ifndef GSM_MOTD_H +#define GSM_MOTD_H + +void gsm_motd_start (void); +void gsm_motd_stop (void); + +#endif --- /dev/null 2006-02-06 19:14:42.000000000 +0100 +++ gnome-session/gsm-motd.c 2006-02-15 14:57:58.000000000 +0100 @@ -0,0 +1,179 @@ +/* gdm-motd.c - Message of the Day support in gnome-session. + + Copyright (C) 1998, 1999 Tom Tromey + + 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, 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., 59 Temple Place - Suite 330, Boston, MA + 02111-1307, USA. */ + +#include +#include +#include +#include +#include +#ifdef HAVE_LIBNOTIFY +#include +#endif +#include "gsm-motd.h" + +static gchar *motd_contents = NULL; +static GnomeVFSMonitorHandle *monitor_handle = NULL; + +static void +display_message_of_the_day_dialog (void) +{ + GtkWidget *dialog; + + if (motd_contents) + { + dialog = gtk_message_dialog_new_with_markup (NULL, 0, GTK_MESSAGE_INFO, GTK_BUTTONS_CLOSE, + "%s\n%s", + _("Message of the Day"), motd_contents); + g_signal_connect (G_OBJECT (dialog), "response", G_CALLBACK (gtk_widget_destroy), NULL); + gtk_widget_show (dialog); + } +} + +#ifdef HAVE_LIBNOTIFY +static void +display_message_of_the_day_notification (void) +{ + NotifyNotification *n; + GdkPixbuf *icon; + + if (!motd_contents) + return; + + if (!notify_is_initted () && !notify_init (_("Session Manager"))) + { + g_printerr ("Could not contact the notification daemon"); + display_message_of_the_day_dialog (); + } + else + { + icon = gtk_icon_theme_load_icon (gtk_icon_theme_get_default (), + "gtk-info", + 48, + GTK_ICON_LOOKUP_USE_BUILTIN, + NULL); + + n = notify_notification_new (_("Message of the Day"), motd_contents, NULL, NULL); + notify_notification_set_icon_from_pixbuf (n, icon); + gdk_pixbuf_unref (icon); + + if (!notify_notification_show (n, NULL)) + { + display_message_of_the_day_dialog (); + } + + //g_object_unref (n); + } +} +#endif + +static void +motd_changed_cb (GnomeVFSMonitorHandle *handle, + const gchar *monitor_uri, + const gchar *info_uri, + GnomeVFSMonitorEventType event_type, + gpointer user_data) +{ + gchar *contents; + gsize length; + + switch (event_type) + { + case GNOME_VFS_MONITOR_EVENT_CHANGED : + case GNOME_VFS_MONITOR_EVENT_CREATED : + if (g_file_get_contents ("/etc/motd", &contents, &length, NULL)) + { + if (length > 0) + { + g_free (motd_contents); + motd_contents = contents; + +#ifdef HAVE_LIBNOTIFY + display_message_of_the_day_notification (); +#else + display_message_of_the_day_dialog (); +#endif + } + } + break; + case GNOME_VFS_MONITOR_EVENT_DELETED : + g_free (motd_contents); + motd_contents = NULL; + break; + } +} + +static gboolean +on_login_cb (gpointer user_data) +{ +#ifdef HAVE_LIBNOTIFY + display_message_of_the_day_notification (); +#else + display_message_of_the_day_dialog (); +#endif + + return FALSE; +} + +void +gsm_motd_start (void) +{ + gchar *contents; + gsize length; + GConfClient *client; + gboolean enabled; + + client = gconf_client_get_default (); + enabled = gconf_client_get_bool (client, "/apps/gnome-session/options/enable_motd", NULL); + g_object_unref (client); + + if (!enabled) + return; + + /* load the MOTD file */ + if (gnome_vfs_monitor_add (&monitor_handle, "file:///etc/motd", GNOME_VFS_MONITOR_FILE, + (GnomeVFSMonitorCallback) motd_changed_cb, NULL) != GNOME_VFS_OK) + { + g_printerr ("Failed to setup monitor for /etc/motd file"); + } + + if (g_file_get_contents ("/etc/motd", &contents, &length, NULL)) + { + if (length > 0) + motd_contents = contents; + } + + /* install a timeout to show the message first time */ + g_timeout_add (8000, (GSourceFunc) on_login_cb, NULL); +} + +void +gsm_motd_stop (void) +{ + if (monitor_handle) + { + gnome_vfs_monitor_cancel (monitor_handle); + monitor_handle = NULL; + } + + if (motd_contents) + { + g_free (motd_contents); + motd_contents = NULL; + } +} ? depcomp ? stamp-h1 ? gnome-session/gsm-motd.c ? gnome-session/gsm-motd.h ? po/stamp-it Index: gnome-session/Makefile.am =================================================================== RCS file: /cvs/gnome/gnome-session/gnome-session/Makefile.am,v retrieving revision 1.108 diff -u -p -r1.108 Makefile.am --- gnome-session/Makefile.am 10 Jan 2005 16:36:40 -0000 1.108 +++ gnome-session/Makefile.am 15 Feb 2006 14:01:55 -0000 @@ -4,6 +4,7 @@ defaultdir = $(datadir)/gnome INCLUDES = \ $(GNOME_SESSION_CFLAGS) \ + $(LIBNOTIFY_CFLAGS) \ $(STANDARD_PROPERTIES_CFLAGS) \ $(WARN_CFLAGS) \ $(DISABLE_DEPRECATED_CFLAGS) \ @@ -26,7 +27,7 @@ STANDARD_PROPERTIES_CFLAGS = -DDATADIR=\""$(datadir)"\" \ $(NULL) -gnome_session_LDADD = $(X_LIBS) $(GNOME_SESSION_LIBS) $(LIBWRAP_LIBS) +gnome_session_LDADD = $(X_LIBS) $(GNOME_SESSION_LIBS) $(LIBWRAP_LIBS) $(LIBNOTIFY_LIBS) gnome_session_save_LDADD = $(GNOME_SESSION_LIBS) gnome_session_remove_LDADD = $(GNOME_SESSION_LIBS) gnome_session_properties_LDADD = $(GNOME_SESSION_LIBS) @@ -95,6 +96,8 @@ gnome_session_SOURCES = \ gsm-keyring.h \ gsm-gsd.c \ gsm-gsd.h \ + gsm-motd.c \ + gsm-motd.h \ gsm-protocol.c \ gsm-protocol.h \ gsm-remote-desktop.c \ Index: gnome-session/main.c =================================================================== RCS file: /cvs/gnome/gnome-session/gnome-session/main.c,v retrieving revision 1.70 diff -u -p -r1.70 main.c --- gnome-session/main.c 30 Oct 2005 11:26:31 -0000 1.70 +++ gnome-session/main.c 15 Feb 2006 14:01:56 -0000 @@ -48,6 +48,7 @@ #include "gsm-xrandr.h" #include "gsm-at-startup.h" #include "gsm-remote-desktop.h" +#include "gsm-motd.h" /* Flag indicating autosave - user won't be prompted on logout to * save the session */ @@ -465,7 +466,11 @@ main (int argc, char *argv[]) if (a_t_support) /* the ATs are happier if the session has started */ gsm_assistive_technologies_start (); + gsm_motd_start (); + gtk_main (); + + gsm_motd_stop (); gsm_remote_desktop_cleanup ();