]> Pileus Git - ~andy/gtk/blob - gtk/tests/gtk-example-application.c
GtkApplication rewrite
[~andy/gtk] / gtk / tests / gtk-example-application.c
1 #include <gtk/gtk.h>
2
3 static void
4 new_window (GtkApplication *app,
5             GFile          *file)
6 {
7   GtkWidget *window, *scrolled, *view;
8
9   window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
10   gtk_window_set_application (GTK_WINDOW (window), app);
11   gtk_window_set_title (GTK_WINDOW (window), "Bloatpad");
12   scrolled = gtk_scrolled_window_new (NULL, NULL);
13   view = gtk_text_view_new ();
14   gtk_container_add (GTK_CONTAINER (scrolled), view);
15   gtk_container_add (GTK_CONTAINER (window), scrolled);
16
17   if (file != NULL)
18     {
19       gchar *contents;
20       gsize length;
21
22       if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL))
23         {
24           GtkTextBuffer *buffer;
25
26           buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
27           gtk_text_buffer_set_text (buffer, contents, length);
28           g_free (contents);
29         }
30     }
31
32   gtk_widget_show_all (GTK_WIDGET (window));
33 }
34
35 static void
36 activate (GtkApplication *application)
37 {
38   new_window (application, NULL);
39 }
40
41 static void
42 open (GtkApplication  *application,
43       GFile          **files,
44       gint             n_files,
45       const gchar     *hint,
46       gpointer         user_data)
47 {
48   gint i;
49
50   for (i = 0; i < n_files; i++)
51     new_window (application, files[i]);
52 }
53
54 int
55 main (int argc, char **argv)
56 {
57   GtkApplication *app;
58   int status;
59
60   app = gtk_application_new ("org.gtk.Test.bloatpad",
61                              G_APPLICATION_HANDLES_OPEN);
62   g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
63   g_signal_connect (app, "open", G_CALLBACK (open), NULL);
64   status = g_application_run (G_APPLICATION (app), argc, argv);
65   g_object_unref (app);
66
67   return status;
68 }