diff options
author | Ray Strode <rstrode@redhat.com> | 2011-06-15 10:13:31 -0400 |
---|---|---|
committer | Ray Strode <rstrode@redhat.com> | 2011-06-15 10:13:31 -0400 |
commit | 23aa2ee0fdb884eaaf23f93fb8f51a01f118995a (patch) | |
tree | 9131287bc8b9addc027bb448c8c9271dfb9c4dac | |
parent | 15a3f0c699fe1e8583a33d744edfbb0801ab92bf (diff) | |
download | gdm-23aa2ee0fdb884eaaf23f93fb8f51a01f118995a.tar.gz |
greeter: drop dead code (language related files)
-rw-r--r-- | gui/simple-greeter/Makefile.am | 55 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-language-chooser-dialog.c | 258 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-language-chooser-dialog.h | 59 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-language-chooser-widget.c | 281 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-language-chooser-widget.h | 58 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-language-option-widget.c | 311 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-language-option-widget.h | 62 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-languages.c | 1159 | ||||
-rw-r--r-- | gui/simple-greeter/gdm-languages.h | 41 | ||||
-rw-r--r-- | gui/simple-greeter/locarchive.h | 97 | ||||
-rw-r--r-- | gui/simple-greeter/test-language-chooser.c | 61 |
11 files changed, 0 insertions, 2442 deletions
diff --git a/gui/simple-greeter/Makefile.am b/gui/simple-greeter/Makefile.am index 8ee0cee4..ed4fd0a5 100644 --- a/gui/simple-greeter/Makefile.am +++ b/gui/simple-greeter/Makefile.am @@ -36,8 +36,6 @@ noinst_PROGRAMS = \ test-filesystem-type \ test-greeter-login-window \ test-greeter-panel \ - test-language-chooser \ - test-languages \ test-sessions \ test-remote-login-window \ test-user-chooser \ @@ -89,8 +87,6 @@ test_greeter_panel_SOURCES = \ gdm-option-widget.c \ gdm-recent-option-widget.h \ gdm-recent-option-widget.c \ - gdm-languages.h \ - gdm-languages.c \ gdm-cell-renderer-timer.h \ gdm-cell-renderer-timer.c \ gdm-timer.h \ @@ -99,13 +95,6 @@ test_greeter_panel_SOURCES = \ gdm-scrollable-widget.c \ gdm-chooser-widget.h \ gdm-chooser-widget.c \ - gdm-language-chooser-widget.h \ - gdm-language-chooser-widget.c \ - locarchive.h \ - gdm-language-chooser-dialog.h \ - gdm-language-chooser-dialog.c \ - gdm-language-option-widget.h \ - gdm-language-option-widget.c \ gdm-sessions.h \ gdm-sessions.c \ gdm-session-option-widget.h \ @@ -141,41 +130,6 @@ test_filesystem_type_LDADD = \ $(COMMON_LIBS) \ $(NULL) -test_language_chooser_SOURCES = \ - test-language-chooser.c \ - gdm-cell-renderer-timer.h \ - gdm-cell-renderer-timer.c \ - gdm-timer.h \ - gdm-timer.c \ - gdm-scrollable-widget.h \ - gdm-scrollable-widget.c \ - gdm-chooser-widget.h \ - gdm-chooser-widget.c \ - gdm-languages.h \ - gdm-languages.c \ - gdm-language-chooser-widget.h \ - gdm-language-chooser-widget.c \ - locarchive.h \ - gdm-language-chooser-dialog.h \ - gdm-language-chooser-dialog.c \ - $(NULL) - -test_language_chooser_LDADD = \ - $(GTK_LIBS) \ - $(GCONF_LIBS) \ - $(NULL) - -test_languages_SOURCES = \ - test-languages.c \ - gdm-languages.h \ - gdm-languages.c \ - locarchive.h \ - $(NULL) - -test_languages_LDADD = \ - $(GTK_LIBS) \ - $(NULL) - test_sessions_SOURCES = \ test-sessions.c \ gdm-sessions.h \ @@ -247,15 +201,6 @@ gdm_simple_greeter_SOURCES = \ gdm-option-widget.c \ gdm-recent-option-widget.h \ gdm-recent-option-widget.c \ - gdm-languages.h \ - gdm-languages.c \ - gdm-language-chooser-widget.h \ - gdm-language-chooser-widget.c \ - locarchive.h \ - gdm-language-chooser-dialog.h \ - gdm-language-chooser-dialog.c \ - gdm-language-option-widget.h \ - gdm-language-option-widget.c \ gdm-sessions.h \ gdm-sessions.c \ gdm-session-option-widget.h \ diff --git a/gui/simple-greeter/gdm-language-chooser-dialog.c b/gui/simple-greeter/gdm-language-chooser-dialog.c deleted file mode 100644 index a5f150a3..00000000 --- a/gui/simple-greeter/gdm-language-chooser-dialog.c +++ /dev/null @@ -1,258 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu> - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#include "config.h" - -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <string.h> - -#include <locale.h> - -#include <glib.h> -#include <glib/gi18n.h> -#include <glib-object.h> -#include <gtk/gtk.h> - -#include "gdm-language-chooser-widget.h" -#include "gdm-language-chooser-dialog.h" - -#define GDM_LANGUAGE_CHOOSER_DIALOG_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_LANGUAGE_CHOOSER_DIALOG, GdmLanguageChooserDialogPrivate)) - -struct GdmLanguageChooserDialogPrivate -{ - GtkWidget *chooser_widget; -}; - - -static void gdm_language_chooser_dialog_class_init (GdmLanguageChooserDialogClass *klass); -static void gdm_language_chooser_dialog_init (GdmLanguageChooserDialog *language_chooser_dialog); -static void gdm_language_chooser_dialog_finalize (GObject *object); - -G_DEFINE_TYPE (GdmLanguageChooserDialog, gdm_language_chooser_dialog, GTK_TYPE_DIALOG) - -char * -gdm_language_chooser_dialog_get_current_language_name (GdmLanguageChooserDialog *dialog) -{ - char *language_name; - - g_return_val_if_fail (GDM_IS_LANGUAGE_CHOOSER_DIALOG (dialog), NULL); - - language_name = gdm_language_chooser_widget_get_current_language_name (GDM_LANGUAGE_CHOOSER_WIDGET (dialog->priv->chooser_widget)); - - return language_name; -} - -void -gdm_language_chooser_dialog_set_current_language_name (GdmLanguageChooserDialog *dialog, - const char *language_name) -{ - - g_return_if_fail (GDM_IS_LANGUAGE_CHOOSER_DIALOG (dialog)); - - gdm_language_chooser_widget_set_current_language_name (GDM_LANGUAGE_CHOOSER_WIDGET (dialog->priv->chooser_widget), language_name); -} - -static void -gdm_language_chooser_dialog_get_preferred_width (GtkWidget *widget, - gint *minimum_size, - gint *natural_size) -{ - GtkWidget *child; - int min_size, nat_size; - int screen_w; - - /* FIXME: this should use monitor size */ - screen_w = gdk_screen_get_width (gtk_widget_get_screen (widget)); - - child = gtk_bin_get_child (GTK_BIN (widget)); - - min_size = 0; - nat_size = 0; - - if (GTK_WIDGET_CLASS (gdm_language_chooser_dialog_parent_class)->get_preferred_width) { - GTK_WIDGET_CLASS (gdm_language_chooser_dialog_parent_class)->get_preferred_width (widget, &min_size, &nat_size); - } - - if (child && gtk_widget_get_visible (child)) { - gtk_widget_get_preferred_width (child, - &min_size, - &nat_size); - } - - min_size += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget)); - min_size = MIN (min_size, .50 * screen_w); - nat_size += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget)); - nat_size = MIN (nat_size, .50 * screen_w); - - if (minimum_size) - *minimum_size = min_size; - if (natural_size) - *natural_size = nat_size; -} - -static void -gdm_language_chooser_dialog_get_preferred_height (GtkWidget *widget, - gint *minimum_size, - gint *natural_size) -{ - GtkWidget *child; - int min_size, nat_size; - int screen_w; - - /* FIXME: this should use monitor size */ - screen_w = gdk_screen_get_height (gtk_widget_get_screen (widget)); - - child = gtk_bin_get_child (GTK_BIN (widget)); - - min_size = 0; - nat_size = 0; - - if (GTK_WIDGET_CLASS (gdm_language_chooser_dialog_parent_class)->get_preferred_height) { - GTK_WIDGET_CLASS (gdm_language_chooser_dialog_parent_class)->get_preferred_height (widget, &min_size, &nat_size); - } - - if (child && gtk_widget_get_visible (child)) { - gtk_widget_get_preferred_height (child, - &min_size, - &nat_size); - } - - min_size += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget)); - min_size = MIN (min_size, .50 * screen_w); - nat_size += 2 * gtk_container_get_border_width (GTK_CONTAINER (widget)); - nat_size = MIN (nat_size, .50 * screen_w); - - if (minimum_size) - *minimum_size = min_size; - if (natural_size) - *natural_size = nat_size; -} - -static void -gdm_language_chooser_dialog_realize (GtkWidget *widget) -{ - GdmLanguageChooserDialog *chooser_dialog; - GdkWindow *root_window; - GdkCursor *cursor; - - root_window = gdk_screen_get_root_window (gdk_screen_get_default ()); - cursor = gdk_cursor_new (GDK_WATCH); - gdk_window_set_cursor (root_window, cursor); - gdk_cursor_unref (cursor); - - chooser_dialog = GDM_LANGUAGE_CHOOSER_DIALOG (widget); - - gtk_widget_show (chooser_dialog->priv->chooser_widget); - - GTK_WIDGET_CLASS (gdm_language_chooser_dialog_parent_class)->realize (widget); - - cursor = gdk_cursor_new (GDK_LEFT_PTR); - gdk_window_set_cursor (root_window, cursor); - gdk_cursor_unref (cursor); -} - -static void -gdm_language_chooser_dialog_class_init (GdmLanguageChooserDialogClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - object_class->finalize = gdm_language_chooser_dialog_finalize; - widget_class->get_preferred_width = gdm_language_chooser_dialog_get_preferred_width; - widget_class->get_preferred_height = gdm_language_chooser_dialog_get_preferred_height; - widget_class->realize = gdm_language_chooser_dialog_realize; - - g_type_class_add_private (klass, sizeof (GdmLanguageChooserDialogPrivate)); -} - -static gboolean -respond (GdmLanguageChooserDialog *dialog) -{ - gtk_dialog_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); - return FALSE; -} - -static void -queue_response (GdmLanguageChooserDialog *dialog) -{ - g_idle_add ((GSourceFunc) respond, dialog); -} - -static void -gdm_language_chooser_dialog_init (GdmLanguageChooserDialog *dialog) -{ - - dialog->priv = GDM_LANGUAGE_CHOOSER_DIALOG_GET_PRIVATE (dialog); - - dialog->priv->chooser_widget = gdm_language_chooser_widget_new (); - gdm_chooser_widget_set_hide_inactive_items (GDM_CHOOSER_WIDGET (dialog->priv->chooser_widget), - FALSE); - - gdm_language_chooser_widget_set_current_language_name (GDM_LANGUAGE_CHOOSER_WIDGET (dialog->priv->chooser_widget), - setlocale (LC_MESSAGES, NULL)); - gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))), dialog->priv->chooser_widget); - - g_signal_connect_swapped (G_OBJECT (dialog->priv->chooser_widget), - "activated", G_CALLBACK (queue_response), - dialog); - - gtk_dialog_add_buttons (GTK_DIALOG (dialog), - GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, - GTK_STOCK_OK, GTK_RESPONSE_OK, - NULL); - - gtk_container_set_border_width (GTK_CONTAINER (dialog), 12); - gtk_container_set_border_width (GTK_CONTAINER (dialog->priv->chooser_widget), 5); - gtk_window_set_position (GTK_WINDOW (dialog), GTK_WIN_POS_CENTER_ALWAYS); - gtk_window_set_default_size (GTK_WINDOW (dialog), 512, 440); - gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK); -} - -static void -gdm_language_chooser_dialog_finalize (GObject *object) -{ - GdmLanguageChooserDialog *language_chooser_dialog; - - g_return_if_fail (object != NULL); - g_return_if_fail (GDM_IS_LANGUAGE_CHOOSER_DIALOG (object)); - - language_chooser_dialog = GDM_LANGUAGE_CHOOSER_DIALOG (object); - - g_return_if_fail (language_chooser_dialog->priv != NULL); - - G_OBJECT_CLASS (gdm_language_chooser_dialog_parent_class)->finalize (object); -} - -GtkWidget * -gdm_language_chooser_dialog_new (void) -{ - GObject *object; - - object = g_object_new (GDM_TYPE_LANGUAGE_CHOOSER_DIALOG, - "icon-name", "preferences-desktop-locale", - "title", _("Languages"), - "border-width", 8, - "modal", TRUE, - NULL); - - return GTK_WIDGET (object); -} diff --git a/gui/simple-greeter/gdm-language-chooser-dialog.h b/gui/simple-greeter/gdm-language-chooser-dialog.h deleted file mode 100644 index 4f2d20d9..00000000 --- a/gui/simple-greeter/gdm-language-chooser-dialog.h +++ /dev/null @@ -1,59 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu> - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#ifndef __GDM_LANGUAGE_CHOOSER_DIALOG_H -#define __GDM_LANGUAGE_CHOOSER_DIALOG_H - -#include <glib-object.h> -#include <gtk/gtk.h> - -G_BEGIN_DECLS - -#define GDM_TYPE_LANGUAGE_CHOOSER_DIALOG (gdm_language_chooser_dialog_get_type ()) -#define GDM_LANGUAGE_CHOOSER_DIALOG(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_LANGUAGE_CHOOSER_DIALOG, GdmLanguageChooserDialog)) -#define GDM_LANGUAGE_CHOOSER_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_LANGUAGE_CHOOSER_DIALOG, GdmLanguageChooserDialogClass)) -#define GDM_IS_LANGUAGE_CHOOSER_DIALOG(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_LANGUAGE_CHOOSER_DIALOG)) -#define GDM_IS_LANGUAGE_CHOOSER_DIALOG_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_LANGUAGE_CHOOSER_DIALOG)) -#define GDM_LANGUAGE_CHOOSER_DIALOG_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_LANGUAGE_CHOOSER_DIALOG, GdmLanguageChooserDialogClass)) - -typedef struct GdmLanguageChooserDialogPrivate GdmLanguageChooserDialogPrivate; - -typedef struct -{ - GtkDialog parent; - GdmLanguageChooserDialogPrivate *priv; -} GdmLanguageChooserDialog; - -typedef struct -{ - GtkDialogClass parent_class; -} GdmLanguageChooserDialogClass; - -GType gdm_language_chooser_dialog_get_type (void); - -GtkWidget * gdm_language_chooser_dialog_new (void); - -char * gdm_language_chooser_dialog_get_current_language_name (GdmLanguageChooserDialog *dialog); -void gdm_language_chooser_dialog_set_current_language_name (GdmLanguageChooserDialog *dialog, - const char *language_name); - -G_END_DECLS - -#endif /* __GDM_LANGUAGE_CHOOSER_DIALOG_H */ diff --git a/gui/simple-greeter/gdm-language-chooser-widget.c b/gui/simple-greeter/gdm-language-chooser-widget.c deleted file mode 100644 index 305044a5..00000000 --- a/gui/simple-greeter/gdm-language-chooser-widget.c +++ /dev/null @@ -1,281 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu> - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#include "config.h" - -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> -#include <dirent.h> -#include <locale.h> -#include <sys/stat.h> - -#include <fontconfig/fontconfig.h> - -#include <glib.h> -#include <glib/gi18n.h> -#include <glib/gstdio.h> -#include <gtk/gtk.h> - -#include "gdm-language-chooser-widget.h" -#include "gdm-chooser-widget.h" -#include "gdm-languages.h" - -#define GDM_LANGUAGE_CHOOSER_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_LANGUAGE_CHOOSER_WIDGET, GdmLanguageChooserWidgetPrivate)) - -struct GdmLanguageChooserWidgetPrivate -{ - guint languages_added : 1; -}; - -static void gdm_language_chooser_widget_class_init (GdmLanguageChooserWidgetClass *klass); -static void gdm_language_chooser_widget_init (GdmLanguageChooserWidget *language_chooser_widget); -static void gdm_language_chooser_widget_finalize (GObject *object); - -G_DEFINE_TYPE (GdmLanguageChooserWidget, gdm_language_chooser_widget, GDM_TYPE_CHOOSER_WIDGET) - -enum { - CHOOSER_LIST_TITLE_COLUMN = 0, - CHOOSER_LIST_TRANSLATED_COLUMN, - CHOOSER_LIST_LOCALE_COLUMN -}; - -char * -gdm_language_chooser_widget_get_current_language_name (GdmLanguageChooserWidget *widget) -{ - char *language_name; - - g_return_val_if_fail (GDM_IS_LANGUAGE_CHOOSER_WIDGET (widget), NULL); - - language_name = gdm_chooser_widget_get_selected_item (GDM_CHOOSER_WIDGET (widget)); - - if (language_name == NULL) { - language_name = g_strdup (setlocale (LC_MESSAGES, NULL)); - } - - return language_name; -} - -void -gdm_language_chooser_widget_set_current_language_name (GdmLanguageChooserWidget *widget, - const char *lang_name) -{ - char *name; - - g_return_if_fail (GDM_IS_LANGUAGE_CHOOSER_WIDGET (widget)); - - if (lang_name == NULL) { - gdm_chooser_widget_set_selected_item (GDM_CHOOSER_WIDGET (widget), - NULL); - return; - } - - name = gdm_normalize_language_name (lang_name); - gdm_chooser_widget_set_selected_item (GDM_CHOOSER_WIDGET (widget), - name); - - g_free (name); -} - -static void -gdm_language_chooser_widget_add_language (GdmLanguageChooserWidget *widget, - const char *name) -{ - char *language; - char *normalized_name; - char *readable_language; - char *lang_tag; - char *tagged; - - normalized_name = gdm_normalize_language_name (name); - gdm_parse_language_name (name, &lang_tag, NULL, NULL, NULL); - language = gdm_get_language_from_name (normalized_name, normalized_name); - readable_language = gdm_get_language_from_name (normalized_name, NULL); - - tagged = g_strdup_printf ("<span lang=\"%s\">%s</span>", lang_tag, language); - - if (language != NULL) { - gdm_chooser_widget_add_item (GDM_CHOOSER_WIDGET (widget), - normalized_name, - NULL, - tagged, - readable_language, - 0, - FALSE, - FALSE, - NULL, - NULL); - g_free (language); - } - g_free (readable_language); - g_free (tagged); - g_free (lang_tag); - g_free (normalized_name); -} - -static gboolean -language_has_font (const char *locale) -{ - const FcCharSet *charset; - FcPattern *pattern; - FcObjectSet *object_set; - FcFontSet *font_set; - char *language_code; - gboolean is_displayable; - - is_displayable = FALSE; - pattern = NULL; - object_set = NULL; - font_set = NULL; - - gdm_parse_language_name (locale, &language_code, NULL, NULL, NULL); - - charset = FcLangGetCharSet ((FcChar8 *) language_code); - if (!charset) { - /* fontconfig does not know about this language */ - is_displayable = TRUE; - } else { - /* see if any fonts support rendering it */ - pattern = FcPatternBuild (NULL, FC_LANG, FcTypeString, language_code, NULL); - - if (pattern == NULL) - goto done; - - object_set = FcObjectSetCreate (); - - if (object_set == NULL) - goto done; - - font_set = FcFontList (NULL, pattern, object_set); - - if (font_set == NULL) - goto done; - - is_displayable = (font_set->nfont > 0); - } - - done: - - if (font_set != NULL) - FcFontSetDestroy (font_set); - - if (object_set != NULL) - FcObjectSetDestroy (object_set); - - if (pattern != NULL) - FcPatternDestroy (pattern); - - g_free (language_code); - return is_displayable; -} - -static void -add_available_languages (GdmLanguageChooserWidget *widget) -{ - char **language_names; - int i; - - language_names = gdm_get_all_language_names (); - - for (i = 0; language_names[i] != NULL; i++) { - if (!language_has_font (language_names[i])) { - g_debug ("There is insufficient font coverage to display messages in the '%s' locale", - language_names[i]); - continue; - } - gdm_language_chooser_widget_add_language (widget, - language_names[i]); - } - - g_strfreev (language_names); -} - -static void -gdm_language_chooser_widget_dispose (GObject *object) -{ - G_OBJECT_CLASS (gdm_language_chooser_widget_parent_class)->dispose (object); -} - -static void -gdm_language_chooser_widget_realize (GtkWidget *widget) -{ - GdmLanguageChooserWidget *chooser; - - chooser = GDM_LANGUAGE_CHOOSER_WIDGET (widget); - - GTK_WIDGET_CLASS (gdm_language_chooser_widget_parent_class)->realize (widget); - - if (!chooser->priv->languages_added) { - add_available_languages (chooser); - chooser->priv->languages_added = TRUE; - } -} - -static void -gdm_language_chooser_widget_class_init (GdmLanguageChooserWidgetClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GtkWidgetClass *widget_class = GTK_WIDGET_CLASS (klass); - - object_class->dispose = gdm_language_chooser_widget_dispose; - object_class->finalize = gdm_language_chooser_widget_finalize; - widget_class->realize = gdm_language_chooser_widget_realize; - - g_type_class_add_private (klass, sizeof (GdmLanguageChooserWidgetPrivate)); -} - -static void -gdm_language_chooser_widget_init (GdmLanguageChooserWidget *widget) -{ - widget->priv = GDM_LANGUAGE_CHOOSER_WIDGET_GET_PRIVATE (widget); - - gdm_chooser_widget_set_separator_position (GDM_CHOOSER_WIDGET (widget), - GDM_CHOOSER_WIDGET_POSITION_TOP); -} - -static void -gdm_language_chooser_widget_finalize (GObject *object) -{ - GdmLanguageChooserWidget *language_chooser_widget; - - g_return_if_fail (object != NULL); - g_return_if_fail (GDM_IS_LANGUAGE_CHOOSER_WIDGET (object)); - - language_chooser_widget = GDM_LANGUAGE_CHOOSER_WIDGET (object); - - g_return_if_fail (language_chooser_widget->priv != NULL); - - G_OBJECT_CLASS (gdm_language_chooser_widget_parent_class)->finalize (object); -} - -GtkWidget * -gdm_language_chooser_widget_new (void) -{ - GObject *object; - - object = g_object_new (GDM_TYPE_LANGUAGE_CHOOSER_WIDGET, - "inactive-text", _("_Languages:"), - "active-text", _("_Language:"), - NULL); - - return GTK_WIDGET (object); -} diff --git a/gui/simple-greeter/gdm-language-chooser-widget.h b/gui/simple-greeter/gdm-language-chooser-widget.h deleted file mode 100644 index 2065833b..00000000 --- a/gui/simple-greeter/gdm-language-chooser-widget.h +++ /dev/null @@ -1,58 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu> - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#ifndef __GDM_LANGUAGE_CHOOSER_WIDGET_H -#define __GDM_LANGUAGE_CHOOSER_WIDGET_H - -#include <glib-object.h> -#include "gdm-chooser-widget.h" - -G_BEGIN_DECLS - -#define GDM_TYPE_LANGUAGE_CHOOSER_WIDGET (gdm_language_chooser_widget_get_type ()) -#define GDM_LANGUAGE_CHOOSER_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_LANGUAGE_CHOOSER_WIDGET, GdmLanguageChooserWidget)) -#define GDM_LANGUAGE_CHOOSER_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_LANGUAGE_CHOOSER_WIDGET, GdmLanguageChooserWidgetClass)) -#define GDM_IS_LANGUAGE_CHOOSER_WIDGET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_LANGUAGE_CHOOSER_WIDGET)) -#define GDM_IS_LANGUAGE_CHOOSER_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_LANGUAGE_CHOOSER_WIDGET)) -#define GDM_LANGUAGE_CHOOSER_WIDGET_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_LANGUAGE_CHOOSER_WIDGET, GdmLanguageChooserWidgetClass)) - -typedef struct GdmLanguageChooserWidgetPrivate GdmLanguageChooserWidgetPrivate; - -typedef struct -{ - GdmChooserWidget parent; - GdmLanguageChooserWidgetPrivate *priv; -} GdmLanguageChooserWidget; - -typedef struct -{ - GdmChooserWidgetClass parent_class; -} GdmLanguageChooserWidgetClass; - -GType gdm_language_chooser_widget_get_type (void); -GtkWidget * gdm_language_chooser_widget_new (void); - -char * gdm_language_chooser_widget_get_current_language_name (GdmLanguageChooserWidget *widget); -void gdm_language_chooser_widget_set_current_language_name (GdmLanguageChooserWidget *widget, - const char *lang_name); - -G_END_DECLS - -#endif /* __GDM_LANGUAGE_CHOOSER_WIDGET_H */ diff --git a/gui/simple-greeter/gdm-language-option-widget.c b/gui/simple-greeter/gdm-language-option-widget.c deleted file mode 100644 index dc02a7fe..00000000 --- a/gui/simple-greeter/gdm-language-option-widget.c +++ /dev/null @@ -1,311 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2008 Red Hat, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Written by: Ray Strode <rstrode@redhat.com> - * - */ - -#include "config.h" - -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> -#include <dirent.h> -#include <sys/stat.h> - -#include <glib.h> -#include <glib/gi18n.h> -#include <glib/gstdio.h> -#include <gtk/gtk.h> - -#include "gdm-profile.h" -#include "gdm-languages.h" -#include "gdm-language-option-widget.h" -#include "gdm-recent-option-widget.h" -#include "gdm-language-chooser-dialog.h" - -#define GDM_LANGUAGE_OPTION_WIDGET_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_LANGUAGE_OPTION_WIDGET, GdmLanguageOptionWidgetPrivate)) - -struct GdmLanguageOptionWidgetPrivate -{ - GtkWidget *dialog; -}; - -enum { - LANGUAGE_ACTIVATED, - NUMBER_OF_SIGNALS -}; - -static guint signals [NUMBER_OF_SIGNALS] = { 0, }; - -static void gdm_language_option_widget_class_init (GdmLanguageOptionWidgetClass *klass); -static void gdm_language_option_widget_init (GdmLanguageOptionWidget *language_option_widget); -static void gdm_language_option_widget_finalize (GObject *object); -static void gdm_language_option_widget_hide_dialog (GdmLanguageOptionWidget *widget); - -G_DEFINE_TYPE (GdmLanguageOptionWidget, gdm_language_option_widget, GDM_TYPE_RECENT_OPTION_WIDGET) - -static void -gdm_language_option_widget_set_language_from_dialog (GdmLanguageOptionWidget *widget) -{ - char *language_name; - - language_name = gdm_language_chooser_dialog_get_current_language_name (GDM_LANGUAGE_CHOOSER_DIALOG (widget->priv->dialog)); - gdm_language_option_widget_set_current_language_name (widget, language_name); - g_free (language_name); -} - -static void -on_dialog_response (GtkDialog *dialog, - int response_id, - GdmLanguageOptionWidget *widget) -{ - switch (response_id) { - case GTK_RESPONSE_OK: - gdm_language_option_widget_set_language_from_dialog (widget); - break; - - default: - break; - } - - gdm_language_option_widget_hide_dialog (widget); -} - -static void -gdm_language_option_widget_hide_dialog (GdmLanguageOptionWidget *widget) -{ - gtk_widget_destroy (widget->priv->dialog); - widget->priv->dialog = NULL; -} - -static void -create_dialog (GdmLanguageOptionWidget *widget) -{ - gdm_profile_start (NULL); - - g_assert (widget->priv->dialog == NULL); - - widget->priv->dialog = gdm_language_chooser_dialog_new (); - - gdm_profile_end (NULL); -} - -static void -gdm_language_option_widget_show_dialog (GdmLanguageOptionWidget *widget, - const char *active_item_id) -{ - if (widget->priv->dialog == NULL) { - create_dialog (widget); - } - - g_signal_connect (GTK_DIALOG (widget->priv->dialog), - "response", - G_CALLBACK (on_dialog_response), - widget); - - gtk_widget_show_all (GTK_WIDGET (widget->priv->dialog)); - - gdm_language_chooser_dialog_set_current_language_name (GDM_LANGUAGE_CHOOSER_DIALOG (GDM_LANGUAGE_OPTION_WIDGET (widget)->priv->dialog), - active_item_id); -} - -static void -gdm_language_option_widget_activated (GdmOptionWidget *widget) -{ - char *active_item_id; - - active_item_id = gdm_option_widget_get_active_item (GDM_OPTION_WIDGET (widget)); - if (active_item_id == NULL) { - return; - } - - if (strcmp (active_item_id, "__other") == 0) { - g_free (active_item_id); - - active_item_id = gdm_option_widget_get_default_item (widget); - gdm_language_option_widget_set_current_language_name (GDM_LANGUAGE_OPTION_WIDGET (widget), active_item_id); - gdm_language_option_widget_show_dialog (GDM_LANGUAGE_OPTION_WIDGET (widget), active_item_id); - } - - g_signal_emit (G_OBJECT (widget), signals[LANGUAGE_ACTIVATED], 0); - - g_free (active_item_id); -} - -static void -gdm_language_option_widget_class_init (GdmLanguageOptionWidgetClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - GdmOptionWidgetClass *option_widget_class = GDM_OPTION_WIDGET_CLASS (klass); - - object_class->finalize = gdm_language_option_widget_finalize; - - option_widget_class->activated = gdm_language_option_widget_activated; - - signals[LANGUAGE_ACTIVATED] = g_signal_new ("language-activated", - G_TYPE_FROM_CLASS (object_class), - G_SIGNAL_RUN_FIRST, - G_STRUCT_OFFSET (GdmLanguageOptionWidgetClass, language_activated), - NULL, - NULL, - g_cclosure_marshal_VOID__VOID, - G_TYPE_NONE, - 0); - - g_type_class_add_private (klass, sizeof (GdmLanguageOptionWidgetPrivate)); -} - -static char * -gdm_language_option_widget_lookup_item (GdmRecentOptionWidget *widget, - const char *locale, - char **name, - char **comment) -{ - char *language; - char *readable_language; - char *lang_tag; - char *normalized_locale; - - normalized_locale = gdm_normalize_language_name (locale); - - language = gdm_get_language_from_name (locale, normalized_locale); - - if (language == NULL) { - g_free (normalized_locale); - return NULL; - } - - readable_language = gdm_get_language_from_name (locale, NULL); - gdm_parse_language_name (locale, &lang_tag, NULL, NULL, NULL); - *name = g_strdup_printf ("<span lang=\"%s\">%s</span>", lang_tag, language); - *comment = readable_language; - - g_free (language); - g_free (lang_tag); - - return normalized_locale; -} - -static void -gdm_language_option_widget_init (GdmLanguageOptionWidget *widget) -{ - GError *error; - - widget->priv = GDM_LANGUAGE_OPTION_WIDGET_GET_PRIVATE (widget); - - error = NULL; - gdm_recent_option_widget_set_gconf_key (GDM_RECENT_OPTION_WIDGET (widget), - "/apps/gdm/simple-greeter/recent-languages", - gdm_language_option_widget_lookup_item, - &error); - - if (error != NULL) { - g_warning ("Could not read recent languages from gconf: %s", - error->message); - g_error_free (error); - } - - gdm_option_widget_add_item (GDM_OPTION_WIDGET (widget), - "__other", - /* translators: This brings up a dialog - * with a list of languages to choose from - */ - C_("language", "Other…"), - _("Choose a language from the " - "full list of available languages."), - GDM_OPTION_WIDGET_POSITION_BOTTOM); -} - -static void -gdm_language_option_widget_finalize (GObject *object) -{ - GdmLanguageOptionWidget *language_option_widget; - - g_return_if_fail (object != NULL); - g_return_if_fail (GDM_IS_LANGUAGE_OPTION_WIDGET (object)); - - language_option_widget = GDM_LANGUAGE_OPTION_WIDGET (object); - - g_return_if_fail (language_option_widget->priv != NULL); - - if (language_option_widget->priv->dialog != NULL) { - gtk_widget_destroy (language_option_widget->priv->dialog); - } - - G_OBJECT_CLASS (gdm_language_option_widget_parent_class)->finalize (object); -} - -GtkWidget * -gdm_language_option_widget_new (void) -{ - GObject *object; - - object = g_object_new (GDM_TYPE_LANGUAGE_OPTION_WIDGET, - "label-text", _("Language"), - "icon-name", "preferences-desktop-locale", - "max-item-count", 8, - NULL); - - return GTK_WIDGET (object); -} - -char * -gdm_language_option_widget_get_current_language_name (GdmLanguageOptionWidget *widget) -{ - char *active_item_id; - - active_item_id = gdm_option_widget_get_active_item (GDM_OPTION_WIDGET (widget)); - if (active_item_id == NULL) { - return NULL; - } - - if (strcmp (active_item_id, "__other") == 0) { - g_free (active_item_id); - return NULL; - } - - return active_item_id; -} - -void -gdm_language_option_widget_set_current_language_name (GdmLanguageOptionWidget *widget, - const char *language_name) -{ - char *normalized_language_name; - - g_return_if_fail (GDM_IS_LANGUAGE_OPTION_WIDGET (widget)); - - if (language_name != NULL) { - normalized_language_name = gdm_normalize_language_name (language_name); - } else { - normalized_language_name = NULL; - } - - if (normalized_language_name != NULL && - !gdm_option_widget_lookup_item (GDM_OPTION_WIDGET (widget), - normalized_language_name, NULL, NULL, NULL)) { - gdm_recent_option_widget_add_item (GDM_RECENT_OPTION_WIDGET (widget), - normalized_language_name); - } - - gdm_option_widget_set_active_item (GDM_OPTION_WIDGET (widget), normalized_language_name); - g_free (normalized_language_name); -} diff --git a/gui/simple-greeter/gdm-language-option-widget.h b/gui/simple-greeter/gdm-language-option-widget.h deleted file mode 100644 index 2d3e3c7d..00000000 --- a/gui/simple-greeter/gdm-language-option-widget.h +++ /dev/null @@ -1,62 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2008 Red Hat, Inc. - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Written by: Ray Strode <rstrode@redhat.com> - */ - -#ifndef __GDM_LANGUAGE_OPTION_WIDGET_H -#define __GDM_LANGUAGE_OPTION_WIDGET_H - -#include <glib-object.h> - -#include "gdm-recent-option-widget.h" - -G_BEGIN_DECLS - -#define GDM_TYPE_LANGUAGE_OPTION_WIDGET (gdm_language_option_widget_get_type ()) -#define GDM_LANGUAGE_OPTION_WIDGET(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GDM_TYPE_LANGUAGE_OPTION_WIDGET, GdmLanguageOptionWidget)) -#define GDM_LANGUAGE_OPTION_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GDM_TYPE_LANGUAGE_OPTION_WIDGET, GdmLanguageOptionWidgetClass)) -#define GDM_IS_LANGUAGE_OPTION_WIDGET(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GDM_TYPE_LANGUAGE_OPTION_WIDGET)) -#define GDM_IS_LANGUAGE_OPTION_WIDGET_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GDM_TYPE_LANGUAGE_OPTION_WIDGET)) -#define GDM_LANGUAGE_OPTION_WIDGET_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GDM_TYPE_LANGUAGE_OPTION_WIDGET, GdmLanguageOptionWidgetClass)) - -typedef struct GdmLanguageOptionWidgetPrivate GdmLanguageOptionWidgetPrivate; - -typedef struct -{ - GdmRecentOptionWidget parent; - GdmLanguageOptionWidgetPrivate *priv; -} GdmLanguageOptionWidget; - -typedef struct -{ - GdmRecentOptionWidgetClass parent_class; - - void (* language_activated) (GdmLanguageOptionWidget *widget); -} GdmLanguageOptionWidgetClass; - -GType gdm_language_option_widget_get_type (void); -GtkWidget * gdm_language_option_widget_new (void); - -char * gdm_language_option_widget_get_current_language_name (GdmLanguageOptionWidget *widget); -void gdm_language_option_widget_set_current_language_name (GdmLanguageOptionWidget *widget, - const char *lang_name); - - - -#endif /* __GDM_LANGUAGE_OPTION_WIDGET_H */ diff --git a/gui/simple-greeter/gdm-languages.c b/gui/simple-greeter/gdm-languages.c deleted file mode 100644 index fa2f0407..00000000 --- a/gui/simple-greeter/gdm-languages.c +++ /dev/null @@ -1,1159 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright 2008 Red Hat, Inc, - * 2007 William Jon McCann <mccann@jhu.edu> - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Written by : William Jon McCann <mccann@jhu.edu> - * Ray Strode <rstrode@redhat.com> - */ - -#include "config.h" - -#include <stdlib.h> -#include <stdio.h> -#include <unistd.h> -#include <string.h> -#include <errno.h> -#include <dirent.h> -#include <locale.h> -#include <langinfo.h> -#include <sys/stat.h> - -#include <glib.h> -#include <glib/gi18n.h> -#include <glib/gstdio.h> - -#include "gdm-languages.h" - -#include <langinfo.h> -#ifndef __LC_LAST -#define __LC_LAST 13 -#endif -#include "locarchive.h" - -#define ALIASES_FILE DATADIR "/gdm/locale.alias" -#define ARCHIVE_FILE LIBLOCALEDIR "/locale-archive" -#define SYSTEM_ARCHIVE_FILE "/usr/lib/locale/locale-archive" -#define ISO_CODES_DATADIR ISO_CODES_PREFIX "/share/xml/iso-codes" -#define ISO_CODES_LOCALESDIR ISO_CODES_PREFIX "/share/locale" - -typedef struct _GdmLocale { - char *id; - char *name; - char *language_code; - char *territory_code; - char *codeset; - char *modifier; -} GdmLocale; - -static GHashTable *gdm_languages_map; -static GHashTable *gdm_territories_map; -static GHashTable *gdm_available_locales_map; - -static char * construct_language_name (const char *language, - const char *territory, - const char *codeset, - const char *modifier); - -static gboolean language_name_is_valid (const char *language_name); - -static void -gdm_locale_free (GdmLocale *locale) -{ - if (locale == NULL) { - return; - } - - g_free (locale->id); - g_free (locale->name); - g_free (locale->codeset); - g_free (locale->modifier); - g_free (locale); -} - -static char * -normalize_codeset (const char *codeset) -{ - char *normalized_codeset; - const char *p; - char *q; - - normalized_codeset = g_strdup (codeset); - - if (codeset != NULL) { - for (p = codeset, q = normalized_codeset; - *p != '\0'; p++) { - - if (*p == '-' || *p == '_') { - continue; - } - - *q = g_ascii_tolower (*p); - q++; - } - *q = '\0'; - } - - return normalized_codeset; -} - -/* - * According to http://en.wikipedia.org/wiki/Locale - * locale names are of the form: - * [language[_territory][.codeset][@modifier]] - */ -gboolean -gdm_parse_language_name (const char *name, - char **language_codep, - char **territory_codep, - char **codesetp, - char **modifierp) -{ - GRegex *re; - GMatchInfo *match_info; - gboolean res; - GError *error; - gchar *normalized_codeset = NULL; - gchar *normalized_name = NULL; - gboolean retval; - - match_info = NULL; - retval = FALSE; - - error = NULL; - re = g_regex_new ("^(?P<language>[^_.@[:space:]]+)" - "(_(?P<territory>[[:upper:]]+))?" - "(\\.(?P<codeset>[-_0-9a-zA-Z]+))?" - "(@(?P<modifier>[[:ascii:]]+))?$", - 0, 0, &error); - if (re == NULL) { - g_warning ("%s", error->message); - goto out; - } - - if (!g_regex_match (re, name, 0, &match_info) || - g_match_info_is_partial_match (match_info)) { - g_warning ("locale %s isn't valid\n", name); - goto out; - } - - res = g_match_info_matches (match_info); - if (! res) { - g_warning ("Unable to parse locale: %s", name); - goto out; - } - - retval = TRUE; - - if (language_codep != NULL) { - *language_codep = g_match_info_fetch_named (match_info, "language"); - } - - if (territory_codep != NULL) { - *territory_codep = g_match_info_fetch_named (match_info, "territory"); - - if (*territory_codep != NULL && - *territory_codep[0] == '\0') { - g_free (*territory_codep); - *territory_codep = NULL; - } - } - - if (codesetp != NULL) { - *codesetp = g_match_info_fetch_named (match_info, "codeset"); - - if (*codesetp != NULL && - *codesetp[0] == '\0') { - g_free (*codesetp); - *codesetp = NULL; - } - } - - if (modifierp != NULL) { - *modifierp = g_match_info_fetch_named (match_info, "modifier"); - - if (*modifierp != NULL && - *modifierp[0] == '\0') { - g_free (*modifierp); - *modifierp = NULL; - } - } - - if (codesetp != NULL && *codesetp != NULL) { - normalized_codeset = normalize_codeset (*codesetp); - normalized_name = construct_language_name (language_codep ? *language_codep : NULL, - territory_codep ? *territory_codep : NULL, - normalized_codeset, - modifierp ? *modifierp : NULL); - - if (language_name_is_valid (normalized_name)) { - g_free (*codesetp); - *codesetp = normalized_codeset; - } else { - g_free (normalized_codeset); - } - g_free (normalized_name); - } - - out: - g_match_info_free (match_info); - g_regex_unref (re); - - return retval; -} - -static char * -construct_language_name (const char *language, - const char *territory, - const char *codeset, - const char *modifier) -{ - char *name; - - g_assert (language[0] != 0); - g_assert (territory == NULL || territory[0] != 0); - g_assert (codeset == NULL || codeset[0] != 0); - g_assert (modifier == NULL || modifier[0] != 0); - - name = g_strdup_printf ("%s%s%s%s%s%s%s", - language, - territory != NULL? "_" : "", - territory != NULL? territory : "", - codeset != NULL? "." : "", - codeset != NULL? codeset : "", - modifier != NULL? "@" : "", - modifier != NULL? modifier : ""); - - return name; -} - -char * -gdm_normalize_language_name (const char *name) -{ - char *normalized_name; - char *language_code; - char *territory_code; - char *codeset; - char *modifier; - - if (name[0] == '\0') { - return NULL; - } - - gdm_parse_language_name (name, - &language_code, - &territory_code, - &codeset, &modifier); - - normalized_name = construct_language_name (language_code, - territory_code, - codeset, modifier); - g_free (language_code); - g_free (territory_code); - g_free (codeset); - g_free (modifier); - - return normalized_name; -} - -static gboolean -language_name_is_valid (const char *language_name) -{ - char *old_locale; - gboolean is_valid; -#ifdef WITH_INCOMPLETE_LOCALES - int lc_type_id = LC_CTYPE; -#else - int lc_type_id = LC_MESSAGES; -#endif - - old_locale = g_strdup (setlocale (lc_type_id, NULL)); - is_valid = setlocale (lc_type_id, language_name) != NULL; - setlocale (lc_type_id, old_locale); - g_free (old_locale); - - return is_valid; -} - -static void -language_name_get_codeset_details (const char *language_name, - char **pcodeset, - gboolean *is_utf8) -{ - char *old_locale; - char *codeset; - - old_locale = g_strdup (setlocale (LC_CTYPE, NULL)); - - if (setlocale (LC_CTYPE, language_name) == NULL) { - g_free (old_locale); - return; - } - - codeset = nl_langinfo (CODESET); - - if (pcodeset != NULL) { - *pcodeset = g_strdup (codeset); - } - - if (is_utf8 != NULL) { - codeset = normalize_codeset (codeset); - - *is_utf8 = strcmp (codeset, "utf8") == 0; - g_free (codeset); - } - - setlocale (LC_CTYPE, old_locale); - g_free (old_locale); -} - -static gboolean -language_name_has_translations (const char *language_name) -{ - GDir *dir; - char *path; - const char *name; - gboolean has_translations; - - path = g_build_filename (GNOMELOCALEDIR, language_name, "LC_MESSAGES", NULL); - - has_translations = FALSE; - dir = g_dir_open (path, 0, NULL); - g_free (path); - - if (dir == NULL) { - goto out; - } - - do { - name = g_dir_read_name (dir); - - if (name == NULL) { - break; - } - - if (g_str_has_suffix (name, ".mo")) { - has_translations = TRUE; - break; - } - } while (name != NULL); - g_dir_close (dir); - -out: - return has_translations; -} - -static gboolean -add_locale (const char *language_name, - gboolean utf8_only) -{ - GdmLocale *locale; - GdmLocale *old_locale; - char *name; - gboolean is_utf8; - - g_return_val_if_fail (language_name != NULL, FALSE); - - language_name_get_codeset_details (language_name, NULL, &is_utf8); - - if (is_utf8) { - name = g_strdup (language_name); - } else if (utf8_only) { - name = g_strdup_printf ("%s.utf8", language_name); - - language_name_get_codeset_details (name, NULL, &is_utf8); - if (!is_utf8) { - g_free (name); - return FALSE; - } - } else { - name = g_strdup (language_name); - } - - if (!language_name_is_valid (name)) { - g_debug ("Ignoring '%s' as a locale, since it's invalid", name); - g_free (name); - return FALSE; - } - - locale = g_new0 (GdmLocale, 1); - gdm_parse_language_name (name, - &locale->language_code, - &locale->territory_code, - &locale->codeset, - &locale->modifier); - g_free (name); - name = NULL; - -#ifdef WITH_INCOMPLETE_LOCALES - if (utf8_only) { - if (locale->territory_code == NULL || locale->modifier) { - gdm_locale_free (locale); - return FALSE; - } - } -#endif - - locale->id = construct_language_name (locale->language_code, locale->territory_code, - NULL, locale->modifier); - locale->name = construct_language_name (locale->language_code, locale->territory_code, - locale->codeset, locale->modifier); - -#ifndef WITH_INCOMPLETE_LOCALES - if (!language_name_has_translations (locale->name) && - !language_name_has_translations (locale->id) && - !language_name_has_translations (locale->language_code) && - utf8_only) { - g_debug ("Ignoring '%s' as a locale, since it lacks translations", locale->name); - gdm_locale_free (locale); - return FALSE; - } -#endif - - if (!utf8_only) { - g_free (locale->id); - locale->id = g_strdup (locale->name); - } - - old_locale = g_hash_table_lookup (gdm_available_locales_map, locale->id); - if (old_locale != NULL) { - if (strlen (old_locale->name) > strlen (locale->name)) { - gdm_locale_free (locale); - return FALSE; - } - } - - g_hash_table_insert (gdm_available_locales_map, g_strdup (locale->id), locale); - - return TRUE; -} - -struct nameent -{ - char *name; - uint32_t locrec_offset; -}; - -static gboolean -collect_locales_from_archive (void) -{ - GMappedFile *mapped; - GError *error; - char *addr; - struct locarhead *head; - struct namehashent *namehashtab; - struct nameent *names; - uint32_t used; - uint32_t cnt; - gsize len; - gboolean locales_collected; - - error = NULL; - mapped = g_mapped_file_new (ARCHIVE_FILE, FALSE, &error); - if (mapped == NULL) { - mapped = g_mapped_file_new (SYSTEM_ARCHIVE_FILE, FALSE, NULL); - if (mapped == NULL) { - g_warning ("Mapping failed for %s: %s", ARCHIVE_FILE, error->message); - g_error_free (error); - return FALSE; - } - g_error_free (error); - } - - locales_collected = FALSE; - - addr = g_mapped_file_get_contents (mapped); - len = g_mapped_file_get_length (mapped); - - head = (struct locarhead *) addr; - if (head->namehash_offset + head->namehash_size > len - || head->string_offset + head->string_size > len - || head->locrectab_offset + head->locrectab_size > len - || head->sumhash_offset + head->sumhash_size > len) { - goto out; - } - - namehashtab = (struct namehashent *) (addr + head->namehash_offset); - - names = (struct nameent *) g_new0 (struct nameent, head->namehash_used); - for (cnt = used = 0; cnt < head->namehash_size; ++cnt) { - if (namehashtab[cnt].locrec_offset != 0) { - names[used].name = addr + namehashtab[cnt].name_offset; - names[used++].locrec_offset = namehashtab[cnt].locrec_offset; - } - } - - for (cnt = 0; cnt < used; ++cnt) { - add_locale (names[cnt].name, TRUE); - } - - g_free (names); - - locales_collected = TRUE; - out: - - g_mapped_file_unref (mapped); - return locales_collected; -} - -static int -select_dirs (const struct dirent *dirent) -{ - int result = 0; - - if (strcmp (dirent->d_name, ".") != 0 && strcmp (dirent->d_name, "..") != 0) { - mode_t mode = 0; - -#ifdef _DIRENT_HAVE_D_TYPE - if (dirent->d_type != DT_UNKNOWN && dirent->d_type != DT_LNK) { - mode = DTTOIF (dirent->d_type); - } else -#endif - { - struct stat st; - char *path; - - path = g_build_filename (LIBLOCALEDIR, dirent->d_name, NULL); - if (g_stat (path, &st) == 0) { - mode = st.st_mode; - } - g_free (path); - } - - result = S_ISDIR (mode); - } - - return result; -} - -static void -collect_locales_from_directory (void) -{ - struct dirent **dirents; - int ndirents; - int cnt; - - ndirents = scandir (LIBLOCALEDIR, &dirents, select_dirs, alphasort); - - for (cnt = 0; cnt < ndirents; ++cnt) { - add_locale (dirents[cnt]->d_name, TRUE); - } - - if (ndirents > 0) { - free (dirents); - } -} - -static void -collect_locales_from_locale_file (const char *locale_file) -{ - FILE *langlist; - char curline[256]; - char *getsret; - - if (locale_file == NULL) - return; - - langlist = fopen (locale_file, "r"); - - if (langlist == NULL) - return; - - for (;;) { - char *name; - char *lang; - char **lang_list; - int i; - - getsret = fgets (curline, sizeof (curline), langlist); - if (getsret == NULL) - break; - - if (curline[0] <= ' ' || - curline[0] == '#') - continue; - - name = strtok (curline, " \t\r\n"); - if (name == NULL) - continue; - - lang = strtok (NULL, " \t\r\n"); - if (lang == NULL) - continue; - - lang_list = g_strsplit (lang, ",", -1); - if (lang_list == NULL) - continue; - - lang = NULL; - for (i = 0; lang_list[i] != NULL; i++) { - if (add_locale (lang_list[i], FALSE)) { - break; - } - } - g_strfreev (lang_list); - } - - fclose (langlist); -} - -static void -collect_locales (void) -{ - - if (gdm_available_locales_map == NULL) { - gdm_available_locales_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, (GDestroyNotify) gdm_locale_free); - } - - if (!collect_locales_from_archive ()) { -#ifndef WITH_INCOMPLETE_LOCALES - g_warning ("Could not read list of available locales from libc, " - "guessing possible locales from available translations, " - "but list may be incomplete!"); -#endif - - collect_locales_from_directory (); - } - collect_locales_from_locale_file (ALIASES_FILE); -} - -static gboolean -is_fallback_language (const char *code) -{ - const char *fallback_language_names[] = { "C", "POSIX", NULL }; - int i; - - for (i = 0; fallback_language_names[i] != NULL; i++) { - if (strcmp (code, fallback_language_names[i]) == 0) { - return TRUE; - } - } - - return FALSE; -} - -static const char * -get_language (const char *code) -{ - const char *name; - int len; - - g_assert (code != NULL); - - if (is_fallback_language (code)) { - return "Unspecified"; - } - - len = strlen (code); - if (len != 2 && len != 3) { - return NULL; - } - - name = (const char *) g_hash_table_lookup (gdm_languages_map, code); - - return name; -} - -static char * -get_first_item_in_semicolon_list (const char *list) -{ - char **items; - char *item; - - /* Some entries in iso codes have multiple values, separated - * by semicolons. Not really sure which one to pick, so - * we just arbitrarily pick the first one. - */ - items = g_strsplit (list, "; ", 2); - - item = g_strdup (items[0]); - g_strfreev (items); - - return item; -} - -static char * -get_translated_language (const char *code, - const char *locale) -{ - const char *language; - char *name; - - language = get_language (code); - - name = NULL; - if (language != NULL) { - const char *translated_name; - char *old_locale; - - if (locale != NULL) { - old_locale = g_strdup (setlocale (LC_MESSAGES, NULL)); - setlocale (LC_MESSAGES, locale); - } - - if (is_fallback_language (code)) { - name = g_strdup (_("Unspecified")); - } else { - translated_name = dgettext ("iso_639", language); - name = get_first_item_in_semicolon_list (translated_name); - } - - if (locale != NULL) { - setlocale (LC_MESSAGES, old_locale); - g_free (old_locale); - } - } - - return name; -} - -static const char * -get_territory (const char *code) -{ - const char *name; - int len; - - g_assert (code != NULL); - - len = strlen (code); - if (len != 2 && len != 3) { - return NULL; - } - - name = (const char *) g_hash_table_lookup (gdm_territories_map, code); - - return name; -} - -static char * -get_translated_territory (const char *code, - const char *locale) -{ - const char *territory; - char *name; - - territory = get_territory (code); - - name = NULL; - if (territory != NULL) { - const char *translated_territory; - char *old_locale; - - if (locale != NULL) { - old_locale = g_strdup (setlocale (LC_MESSAGES, NULL)); - setlocale (LC_MESSAGES, locale); - } - - translated_territory = dgettext ("iso_3166", territory); - name = get_first_item_in_semicolon_list (translated_territory); - - if (locale != NULL) { - setlocale (LC_MESSAGES, old_locale); - g_free (old_locale); - } - } - - return name; -} - -static void -languages_parse_start_tag (GMarkupParseContext *ctx, - const char *element_name, - const char **attr_names, - const char **attr_values, - gpointer user_data, - GError **error) -{ - const char *ccode_longB; - const char *ccode_longT; - const char *ccode; - const char *ccode_id; - const char *lang_name; - - if (! (g_str_equal (element_name, "iso_639_entry") || g_str_equal (element_name, "iso_639_3_entry")) - || attr_names == NULL || attr_values == NULL) { - return; - } - - ccode = NULL; - ccode_longB = NULL; - ccode_longT = NULL; - ccode_id = NULL; - lang_name = NULL; - - while (*attr_names && *attr_values) { - if (g_str_equal (*attr_names, "iso_639_1_code")) { - /* skip if empty */ - if (**attr_values) { - if (strlen (*attr_values) != 2) { - return; - } - ccode = *attr_values; - } - } else if (g_str_equal (*attr_names, "iso_639_2B_code")) { - /* skip if empty */ - if (**attr_values) { - if (strlen (*attr_values) != 3) { - return; - } - ccode_longB = *attr_values; - } - } else if (g_str_equal (*attr_names, "iso_639_2T_code")) { - /* skip if empty */ - if (**attr_values) { - if (strlen (*attr_values) != 3) { - return; - } - ccode_longT = *attr_values; - } - } else if (g_str_equal (*attr_names, "id")) { - /* skip if empty */ - if (**attr_values) { - if (strlen (*attr_values) != 2 && - strlen (*attr_values) != 3) { - return; - } - ccode_id = *attr_values; - } - } else if (g_str_equal (*attr_names, "name")) { - lang_name = *attr_values; - } - - ++attr_names; - ++attr_values; - } - - if (lang_name == NULL) { - return; - } - - if (ccode != NULL) { - g_hash_table_insert (gdm_languages_map, - g_strdup (ccode), - g_strdup (lang_name)); - } - if (ccode_longB != NULL) { - g_hash_table_insert (gdm_languages_map, - g_strdup (ccode_longB), - g_strdup (lang_name)); - } - if (ccode_longT != NULL) { - g_hash_table_insert (gdm_languages_map, - g_strdup (ccode_longT), - g_strdup (lang_name)); - } - if (ccode_id != NULL) { - g_hash_table_insert (gdm_languages_map, - g_strdup (ccode_id), - g_strdup (lang_name)); - } -} - -static void -territories_parse_start_tag (GMarkupParseContext *ctx, - const char *element_name, - const char **attr_names, - const char **attr_values, - gpointer user_data, - GError **error) -{ - const char *acode_2; - const char *acode_3; - const char *ncode; - const char *territory_common_name; - const char *territory_name; - - if (! g_str_equal (element_name, "iso_3166_entry") || attr_names == NULL || attr_values == NULL) { - return; - } - - acode_2 = NULL; - acode_3 = NULL; - ncode = NULL; - territory_common_name = NULL; - territory_name = NULL; - - while (*attr_names && *attr_values) { - if (g_str_equal (*attr_names, "alpha_2_code")) { - /* skip if empty */ - if (**attr_values) { - if (strlen (*attr_values) != 2) { - return; - } - acode_2 = *attr_values; - } - } else if (g_str_equal (*attr_names, "alpha_3_code")) { - /* skip if empty */ - if (**attr_values) { - if (strlen (*attr_values) != 3) { - return; - } - acode_3 = *attr_values; - } - } else if (g_str_equal (*attr_names, "numeric_code")) { - /* skip if empty */ - if (**attr_values) { - if (strlen (*attr_values) != 3) { - return; - } - ncode = *attr_values; - } - } else if (g_str_equal (*attr_names, "common_name")) { - /* skip if empty */ - if (**attr_values) { - territory_common_name = *attr_values; - } - } else if (g_str_equal (*attr_names, "name")) { - territory_name = *attr_values; - } - - ++attr_names; - ++attr_values; - } - - if (territory_common_name != NULL) { - territory_name = territory_common_name; - } - - if (territory_name == NULL) { - return; - } - - if (acode_2 != NULL) { - g_hash_table_insert (gdm_territories_map, - g_strdup (acode_2), - g_strdup (territory_name)); - } - if (acode_3 != NULL) { - g_hash_table_insert (gdm_territories_map, - g_strdup (acode_3), - g_strdup (territory_name)); - } - if (ncode != NULL) { - g_hash_table_insert (gdm_territories_map, - g_strdup (ncode), - g_strdup (territory_name)); - } -} - -static void -languages_variant_init (const char *variant) -{ - GError *error; - gboolean res; - char *buf; - gsize buf_len; - char *filename; - - bindtextdomain (variant, ISO_CODES_LOCALESDIR); - bind_textdomain_codeset (variant, "UTF-8"); - - error = NULL; - filename = g_strdup_printf (ISO_CODES_DATADIR "/%s.xml", variant); - res = g_file_get_contents (filename, - &buf, - &buf_len, - &error); - if (res) { - GMarkupParseContext *ctx; - GMarkupParser parser = { languages_parse_start_tag, NULL, NULL, NULL, NULL }; - - ctx = g_markup_parse_context_new (&parser, 0, NULL, NULL); - - error = NULL; - res = g_markup_parse_context_parse (ctx, buf, buf_len, &error); - - if (! res) { - g_warning ("Failed to parse '%s': %s\n", - filename, - error->message); - g_error_free (error); - g_free (filename); - } - - g_markup_parse_context_free (ctx); - g_free (buf); - } else { - g_warning ("Failed to load '%s': %s\n", - filename, - error->message); - g_error_free (error); - } -} - -static void -languages_init (void) -{ - gdm_languages_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - - languages_variant_init ("iso_639"); - languages_variant_init ("iso_639_3"); -} - -static void -territories_init (void) -{ - GError *error; - gboolean res; - char *buf; - gsize buf_len; - - bindtextdomain ("iso_3166", ISO_CODES_LOCALESDIR); - bind_textdomain_codeset ("iso_3166", "UTF-8"); - - gdm_territories_map = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, g_free); - - error = NULL; - res = g_file_get_contents (ISO_CODES_DATADIR "/iso_3166.xml", - &buf, - &buf_len, - &error); - if (res) { - GMarkupParseContext *ctx; - GMarkupParser parser = { territories_parse_start_tag, NULL, NULL, NULL, NULL }; - - ctx = g_markup_parse_context_new (&parser, 0, NULL, NULL); - - error = NULL; - res = g_markup_parse_context_parse (ctx, buf, buf_len, &error); - - if (! res) { - g_warning ("Failed to parse '%s': %s\n", - ISO_CODES_DATADIR "/iso_3166.xml", - error->message); - g_error_free (error); - } - - g_markup_parse_context_free (ctx); - g_free (buf); - } else { - g_warning ("Failed to load '%s': %s\n", - ISO_CODES_DATADIR "/iso_3166.xml", - error->message); - g_error_free (error); - } -} - -char * -gdm_get_language_from_name (const char *name, - const char *locale) -{ - GString *full_language; - char *language_code; - char *territory_code; - char *codeset_code; - char *langinfo_codeset; - char *translated_language; - char *translated_territory; - gboolean is_utf8 = TRUE; - - translated_territory = NULL; - translated_language = NULL; - langinfo_codeset = NULL; - - full_language = g_string_new (NULL); - - if (gdm_languages_map == NULL) { - languages_init (); - } - - if (gdm_territories_map == NULL) { - territories_init (); - } - - language_code = NULL; - territory_code = NULL; - codeset_code = NULL; - - gdm_parse_language_name (name, - &language_code, - &territory_code, - &codeset_code, - NULL); - - if (language_code == NULL) { - goto out; - } - - translated_language = get_translated_language (language_code, locale); - if (translated_language == NULL) { - goto out; - } - - full_language = g_string_append (full_language, translated_language); - - if (territory_code != NULL) { - translated_territory = get_translated_territory (territory_code, locale); - } - if (translated_territory != NULL) { - g_string_append_printf (full_language, - " (%s)", - translated_territory); - } - - language_name_get_codeset_details (name, &langinfo_codeset, &is_utf8); - - if (codeset_code == NULL && langinfo_codeset != NULL) { - codeset_code = g_strdup (langinfo_codeset); - } - - if (!is_utf8 && codeset_code) { - g_string_append_printf (full_language, - " [%s]", - codeset_code); - } - -out: - g_free (language_code); - g_free (territory_code); - g_free (codeset_code); - g_free (langinfo_codeset); - g_free (translated_language); - g_free (translated_territory); - - if (full_language->len == 0) { - g_string_free (full_language, TRUE); - return NULL; - } - - return g_string_free (full_language, FALSE); -} - -char ** -gdm_get_all_language_names (void) -{ - GHashTableIter iter; - gpointer key, value; - GPtrArray *array; - - if (gdm_available_locales_map == NULL) { - collect_locales (); - } - - array = g_ptr_array_new (); - g_hash_table_iter_init (&iter, gdm_available_locales_map); - while (g_hash_table_iter_next (&iter, &key, &value)) { - GdmLocale *locale; - - locale = (GdmLocale *) value; - - g_ptr_array_add (array, g_strdup (locale->name)); - } - g_ptr_array_add (array, NULL); - - return (char **) g_ptr_array_free (array, FALSE); -} diff --git a/gui/simple-greeter/gdm-languages.h b/gui/simple-greeter/gdm-languages.h deleted file mode 100644 index 5b4560fd..00000000 --- a/gui/simple-greeter/gdm-languages.h +++ /dev/null @@ -1,41 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright 2008 Red Hat, Inc. - * Copyright 2007 William Jon McCann <mccann@jhu.edu> - * - * 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - * Written by: Ray Strode - * William Jon McCann - */ - -#ifndef __GDM_LANGUAGES_H -#define __GDM_LANGUAGES_H - -G_BEGIN_DECLS - -char * gdm_get_language_from_name (const char *name, - const char *locale); -char ** gdm_get_all_language_names (void); -gboolean gdm_parse_language_name (const char *name, - char **language_codep, - char **territory_codep, - char **codesetp, - char **modifierp); -char * gdm_normalize_language_name (const char *name); - -G_END_DECLS - -#endif /* __GDM_LANGUAGE_CHOOSER_WIDGET_H */ diff --git a/gui/simple-greeter/locarchive.h b/gui/simple-greeter/locarchive.h deleted file mode 100644 index f933f4d9..00000000 --- a/gui/simple-greeter/locarchive.h +++ /dev/null @@ -1,97 +0,0 @@ -/* Definitions for locale archive handling. - Copyright (C) 2002 Free Software Foundation, Inc. - This file is part of the GNU C Library. - - The GNU C Library is free software; you can redistribute it and/or - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library 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 - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, write to the Free - Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA - 02111-1307 USA. */ - -#ifndef _LOCARCHIVE_H -#define _LOCARCHIVE_H 1 - -#include <stdint.h> - -#define AR_MAGIC 0xde020109 - -struct locarhead -{ - uint32_t magic; - /* Serial number. */ - uint32_t serial; - /* Name hash table. */ - uint32_t namehash_offset; - uint32_t namehash_used; - uint32_t namehash_size; - /* String table. */ - uint32_t string_offset; - uint32_t string_used; - uint32_t string_size; - /* Table with locale records. */ - uint32_t locrectab_offset; - uint32_t locrectab_used; - uint32_t locrectab_size; - /* MD5 sum hash table. */ - uint32_t sumhash_offset; - uint32_t sumhash_used; - uint32_t sumhash_size; -}; - - -struct namehashent -{ - /* Hash value of the name. */ - uint32_t hashval; - /* Offset of the name in the string table. */ - uint32_t name_offset; - /* Offset of the locale record. */ - uint32_t locrec_offset; -}; - - -struct sumhashent -{ - /* MD5 sum. */ - char sum[16]; - /* Offset of the file in the archive. */ - uint32_t file_offset; -}; - -struct locrecent -{ - uint32_t refs; /* # of namehashent records that point here */ - struct - { - uint32_t offset; - uint32_t len; - } record[__LC_LAST]; -}; - - -struct locarhandle -{ - int fd; - void *addr; - size_t len; -}; - - -/* In memory data for the locales with their checksums. */ -typedef struct locale_category_data -{ - off_t size; - void *addr; - char sum[16]; -} locale_data_t[__LC_LAST]; - -#endif /* locarchive.h */ diff --git a/gui/simple-greeter/test-language-chooser.c b/gui/simple-greeter/test-language-chooser.c deleted file mode 100644 index 04e14580..00000000 --- a/gui/simple-greeter/test-language-chooser.c +++ /dev/null @@ -1,61 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 William Jon McCann <mccann@jhu.edu> - * - * 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., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#include "config.h" - -#include <stdlib.h> -#include <libintl.h> -#include <locale.h> -#include <string.h> -#include <unistd.h> -#include <signal.h> -#include <errno.h> - -#include <glib/gi18n.h> -#include <gtk/gtk.h> - -#include "gdm-language-chooser-dialog.h" - -int -main (int argc, char *argv[]) -{ - GtkWidget *dialog; - - bindtextdomain (GETTEXT_PACKAGE, GNOMELOCALEDIR); - bind_textdomain_codeset (GETTEXT_PACKAGE, "UTF-8"); - textdomain (GETTEXT_PACKAGE); - - setlocale (LC_ALL, ""); - - gtk_init (&argc, &argv); - - dialog = gdm_language_chooser_dialog_new (); - gtk_widget_set_size_request (dialog, 480, 480); - - if (gtk_dialog_run (GTK_DIALOG (dialog)) == GTK_RESPONSE_OK) { - char *name; - - name = gdm_language_chooser_dialog_get_current_language_name (GDM_LANGUAGE_CHOOSER_DIALOG (dialog)); - g_message ("Language: %s", name ? name : "(null)"); - g_free (name); - } - gtk_widget_destroy (dialog); - - return 0; -} |