diff options
author | Lorry Tar Creator <lorry-tar-importer@baserock.org> | 2014-12-24 07:38:37 +0000 |
---|---|---|
committer | <> | 2015-02-02 12:02:29 +0000 |
commit | 482840e61f86ca321838a91e902c41d40c098bbb (patch) | |
tree | 01ea2e242fd2792d19fe192476601587901db794 /gettext-tools/examples/hello-c-gnome3/hello.c | |
download | gettext-tarball-482840e61f86ca321838a91e902c41d40c098bbb.tar.gz |
Imported from /home/lorry/working-area/delta_gettext-tarball/gettext-0.19.4.tar.xz.gettext-0.19.4
Diffstat (limited to 'gettext-tools/examples/hello-c-gnome3/hello.c')
-rw-r--r-- | gettext-tools/examples/hello-c-gnome3/hello.c | 176 |
1 files changed, 176 insertions, 0 deletions
diff --git a/gettext-tools/examples/hello-c-gnome3/hello.c b/gettext-tools/examples/hello-c-gnome3/hello.c new file mode 100644 index 0000000..a642ac6 --- /dev/null +++ b/gettext-tools/examples/hello-c-gnome3/hello.c @@ -0,0 +1,176 @@ +/* Example for use of GNU gettext. + This file is in the public domain. + + Source code of the C program. */ + + +/* Get GTK declarations. */ +#include <gtk/gtk.h> +#include <glib/gi18n.h> + +/* Get getpid() declaration. */ +#if HAVE_UNISTD_H +# include <unistd.h> +#endif + +#define UI_PATH "/org/gnu/gettext/examples/hello/hello.ui" +#define APPLICATION_ID "org.gnu.gettext.examples.hello" +#define GSETTINGS_SCHEMA "org.gnu.gettext.examples.hello" + +static void +quit_callback (GtkWidget *widget, void *data) +{ + g_application_quit (G_APPLICATION (data)); +} + +/* Forward declaration of GObject types. */ + +#define HELLO_TYPE_APPLICATION_WINDOW (hello_application_window_get_type ()) +#define HELLO_APPLICATION_WINDOW(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ + HELLO_TYPE_APPLICATION_WINDOW, \ + HelloApplicationWindow)) + +typedef struct _HelloApplicationWindow HelloApplicationWindow; +typedef struct _HelloApplicationWindowClass HelloApplicationWindowClass; + +#define HELLO_TYPE_APPLICATION (hello_application_get_type ()) +#define HELLO_APPLICATION(obj) \ + (G_TYPE_CHECK_INSTANCE_CAST ((obj), \ + HELLO_TYPE_APPLICATION, \ + HelloApplication)) + +typedef struct _HelloApplication HelloApplication; +typedef struct _HelloApplicationClass HelloApplicationClass; + +/* Custom application window implementation. */ + +struct _HelloApplicationWindow +{ + GtkApplicationWindow parent; + GtkWidget *label2; + GtkWidget *button; + GSettings *settings; +}; + +struct _HelloApplicationWindowClass +{ + GtkApplicationWindowClass parent_class; +}; + +G_DEFINE_TYPE (HelloApplicationWindow, hello_application_window, + GTK_TYPE_APPLICATION_WINDOW); + +static void +hello_application_window_init (HelloApplicationWindow *window) +{ + char *label; + + gtk_widget_init_template (GTK_WIDGET (window)); + label = g_strdup_printf (_("This program is running as process number %d."), + getpid ()); + gtk_label_set_label (GTK_LABEL (window->label2), label); + g_free (label); + + window->settings = g_settings_new (GSETTINGS_SCHEMA); + g_settings_bind (window->settings, "label-sensitive", + window->label2, "sensitive", + G_SETTINGS_BIND_DEFAULT); +} + +static void +hello_application_window_dispose (GObject *object) +{ + HelloApplicationWindow *window = HELLO_APPLICATION_WINDOW (object); + g_clear_object (&window->settings); +} + +static void +hello_application_window_class_init (HelloApplicationWindowClass *klass) +{ + GObjectClass *gobject_class = G_OBJECT_CLASS (klass); + + gobject_class->dispose = hello_application_window_dispose; + + gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (klass), + UI_PATH); + gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (klass), + HelloApplicationWindow, label2); + gtk_widget_class_bind_template_child (GTK_WIDGET_CLASS (klass), + HelloApplicationWindow, button); +} + +static HelloApplicationWindow * +hello_application_window_new (HelloApplication *application) +{ + return g_object_new (HELLO_TYPE_APPLICATION_WINDOW, + "application", application, + NULL); +} + +/* Custom application implementation. */ + +struct _HelloApplication +{ + GtkApplication parent; +}; + +struct _HelloApplicationClass +{ + GtkApplicationClass parent_class; +}; + +G_DEFINE_TYPE (HelloApplication, hello_application, GTK_TYPE_APPLICATION); + +static void +hello_application_init (HelloApplication *application) +{ +} + +static void +hello_application_activate (GApplication *application) +{ + HelloApplicationWindow *window; + + window = hello_application_window_new (HELLO_APPLICATION (application)); + g_signal_connect (window->button, "clicked", + G_CALLBACK (quit_callback), application); + gtk_window_present (GTK_WINDOW (window)); +} + +static void +hello_application_class_init (HelloApplicationClass *klass) +{ + G_APPLICATION_CLASS (klass)->activate = hello_application_activate; +} + +static HelloApplication * +hello_application_new (void) +{ + return g_object_new (HELLO_TYPE_APPLICATION, + "application-id", APPLICATION_ID, + NULL); +} + +int +main (int argc, char *argv[]) +{ + GApplication *application; + int status; + + /* Load the GSettings schema from the current directory. */ + g_setenv ("GSETTINGS_SCHEMA_DIR", ".", FALSE); + + /* Initializations. */ + textdomain ("hello-c-gnome3"); + bindtextdomain ("hello-c-gnome3", LOCALEDIR); + + /* Create application. */ + application = G_APPLICATION (hello_application_new ()); + + /* Start the application. */ + status = g_application_run (application, argc, argv); + g_object_unref (application); + + return status; +} |