summaryrefslogtreecommitdiff
path: root/gui
diff options
context:
space:
mode:
authorRay Strode <rstrode@redhat.com>2011-06-15 10:13:31 -0400
committerRay Strode <rstrode@redhat.com>2011-06-15 10:13:31 -0400
commit23aa2ee0fdb884eaaf23f93fb8f51a01f118995a (patch)
tree9131287bc8b9addc027bb448c8c9271dfb9c4dac /gui
parent15a3f0c699fe1e8583a33d744edfbb0801ab92bf (diff)
downloadgdm-23aa2ee0fdb884eaaf23f93fb8f51a01f118995a.tar.gz
greeter: drop dead code (language related files)
Diffstat (limited to 'gui')
-rw-r--r--gui/simple-greeter/Makefile.am55
-rw-r--r--gui/simple-greeter/gdm-language-chooser-dialog.c258
-rw-r--r--gui/simple-greeter/gdm-language-chooser-dialog.h59
-rw-r--r--gui/simple-greeter/gdm-language-chooser-widget.c281
-rw-r--r--gui/simple-greeter/gdm-language-chooser-widget.h58
-rw-r--r--gui/simple-greeter/gdm-language-option-widget.c311
-rw-r--r--gui/simple-greeter/gdm-language-option-widget.h62
-rw-r--r--gui/simple-greeter/gdm-languages.c1159
-rw-r--r--gui/simple-greeter/gdm-languages.h41
-rw-r--r--gui/simple-greeter/locarchive.h97
-rw-r--r--gui/simple-greeter/test-language-chooser.c61
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;
-}