diff --git a/configure.ac b/configure.ac
index 54b0ee6ea0..133da3118f 100644
--- a/configure.ac
+++ b/configure.ac
@@ -1796,6 +1796,14 @@ demos/gtk-demo/geninclude.pl
demos/pixbuf-demo/Makefile
demos/widget-factory/Makefile
examples/Makefile
+examples/application1/Makefile
+examples/application2/Makefile
+examples/application3/Makefile
+examples/application4/Makefile
+examples/application5/Makefile
+examples/application6/Makefile
+examples/application7/Makefile
+examples/application8/Makefile
tests/Makefile
tests/visuals/Makefile
testsuite/Makefile
diff --git a/docs/reference/gtk/Makefile.am b/docs/reference/gtk/Makefile.am
index e10f9f1524..e2fff14dc0 100644
--- a/docs/reference/gtk/Makefile.am
+++ b/docs/reference/gtk/Makefile.am
@@ -412,7 +412,14 @@ HTML_IMAGES = \
$(srcdir)/images/up-center.png \
$(srcdir)/images/up-end.png \
$(srcdir)/images/up-start.png \
- $(srcdir)/images/list-box.png
+ $(srcdir)/images/list-box.png \
+ $(srcdir)/images/getting-started-app1.png \
+ $(srcdir)/images/getting-started-app2.png \
+ $(srcdir)/images/getting-started-app3.png \
+ $(srcdir)/images/getting-started-app4.png \
+ $(srcdir)/images/getting-started-app6.png \
+ $(srcdir)/images/getting-started-app7.png \
+ $(srcdir)/images/getting-started-app8.png
# Extra options to supply to gtkdoc-fixref
FIXXREF_OPTIONS=--extra-dir=../gdk/html \
diff --git a/docs/reference/gtk/getting_started.xml b/docs/reference/gtk/getting_started.xml
index 5df456dafa..e346f20c7f 100644
--- a/docs/reference/gtk/getting_started.xml
+++ b/docs/reference/gtk/getting_started.xml
@@ -12,7 +12,7 @@
Compiling the GTK+ libraries
section in this reference.
-
+
Basics
To begin our introduction to GTK, we'll start with the simplest
@@ -127,9 +127,9 @@
gcc `pkg-config --cflags gtk+-3.0` -o example-1 example-1.c `pkg-config --libs gtk+-3.0`
-
+
-
+
Packing
When creating an application, you'll want to put more than one widget
@@ -165,9 +165,9 @@
gcc `pkg-config --cflags gtk+-3.0` -o example-2 example-2.c `pkg-config --libs gtk+-3.0`
-
+
-
+
Drawing
Many widgets, like buttons, do all their drawing themselves. You
@@ -210,10 +210,10 @@
gcc `pkg-config --cflags gtk+-3.0` -o example-3 example-3.c `pkg-config --libs gtk+-3.0`
-
+
-
- Building interfaces
+
+ Building user interfaces
When construcing a more complicated user interface, with dozens
or hundreds of widgets, doing all the setup work in C code is
@@ -258,6 +258,586 @@
UI editors such as glade
can load the file and allow you to create and modify your UI by
point-and-click.
+
-
+
+ Building applications
+
+ GTK+ includes application support that is built on top of
+ #GApplication. In this tutorial we'll build a simple application by
+ starting from scratch, adding more and more pieces over time. Along
+ the way, we'll learn about #GtkApplication, templates, resources,
+ application menus, settings, #GtkHeaderBar, #GtkStack, #GtkSearchBar,
+ #GtkListBox, and more.
+
+ The full, buildable sources for these examples can be find
+ in the examples/ directory of the GTK+ source distribution, or
+ online in the GTK+ git repository.
+
+
+ A trivial application
+
+ When using #GtkApplication, the main() function can be very
+ simple. We just call g_application_run() and give it an instance
+ of our application class.
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ All the application logic is in the application class, which
+ is a subclass of #GtkApplication. Our example does not yet have any
+ interesting functionality. All it does is open a window when it is
+ activated without arguments, and open the files it is given, if it
+ is started with arguments.
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ Another important class that is part of the application support
+ in GTK+ is #GtkApplicationWindow. It is typically subclassed as well.
+ Our subclass does not do anything yet, so we will just get an empty
+ window.
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ Here is what we've achieved so far:
+
+
+
+
+
+
+
+
+
+ This does not look very impressive yet, but our application
+ is already presenting itself on the session bus, it has single-instance
+ semantics, and it accepts files as commandline arguments.
+
+
+
+ Populating the window
+
+ In this step, we use a #GtkBuilder template to associate a
+ #GtkBuilder ui file with our application window class.
+ Our simple ui file puts a #GtkHeaderBar on top of a #GtkStack
+ widget. The header bar contains a #GtkStackSwitcher, which is a
+ standalone widget to show a row of 'tabs' for the pages of a #GtkStack.
+
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ To make use of this file in our application, we revisit
+ our #GtkApplicationWindow subclass, and call
+ gtk_widget_class_set_template_from_resource() from the class init
+ function to set the ui file as template for this class. We also
+ add a call to gtk_widget_init_template() in the instance init
+ function to instantiate the template for each instance of our
+ class.
+
+
+
+ (full source)
+
+
+ You may have noticed that we used the _from_resource() variant
+ of the function that sets a template. Now we need to use GLib's resource
+ functionality to include the ui file in the binary. This is commonly
+ done by listing all resources in a .gresource.xml file, such as this:
+
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ This file has to be converted into a C source file that will be
+ compiled and linked into the application together with the other source
+ files. To do so, we use the glib-compile-resources utility:
+
+
+ glib-compile-resources exampleapp.gresource.xml --target=resources.c --generate-source
+
+
+ Our application now looks like this:
+
+
+
+
+
+
+
+
+
+
+
+ Opening files
+
+ In this step, we make our application show the content of
+ all the files that it is given on the commandline.
+
+ To this end, we add a private struct to our application
+ window subclass and keep a reference to the #GtkStack there.
+ The gtk_widget_class_bind_child() function arranges things so
+ that after instantiating the template, the @stack member of
+ the private struct will point to the widget of the same name
+ from the template.
+
+
+
+ (full source)
+
+
+ Now we revisit the example_app_window_open() function that
+ is called for each commandline argument, and construct a GtkTextView
+ that we then add as a page to the stack:
+
+
+ stack), scrolled, basename, basename);
+
+ if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL)) {
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+ gtk_text_buffer_set_text (buffer, contents, length);
+ g_free (contents);
+ }
+
+ g_free (basename);
+}
+
+...
+ ]]>
+ (full source)
+
+
+ Note that we did not have to touch the stack switcher
+ at all. It gets all its information from the stack that it
+ belongs to. Here, we are passing the label to show for each
+ file as the third argument to the gtk_stack_add_titled()
+ function.
+
+ Our application is beginning to take shape:
+
+
+
+
+
+
+
+
+
+
+
+ An application menu
+
+ An application menu is shown by GNOME shell at the top of the
+ screen. It is meant to collect infrequently used actions that affect
+ the whole application.
+
+ Just like the window template, we specify our application menu
+ in a ui file, and add it as a resource to our binary.
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ To associate the app menu with the application, we have to call
+ gtk_application_set_app_menu(). Since app menus work by activating
+ #GActions, we also have to add a suitable set of actions to our
+ application.
+
+ Both of these tasks are best done in the startup() vfunc,
+ which is guaranteed to be called once for each primary application
+ instance:
+
+
+...
+
+static void
+preferences_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry app_entries[] = {
+ { "preferences", preferences_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+static void
+example_app_startup (GApplication *app)
+{
+ GtkBuilder *builder;
+ GMenuModel *app_menu;
+
+ G_APPLICATION_CLASS (example_app_parent_class)->startup (app);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ app_entries, G_N_ELEMENTS (app_entries),
+ app);
+
+ builder = gtk_builder_new_from_resource ("/org/gtk/exampleapp/app-menu.ui");
+ app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "appmenu"));
+ gtk_application_set_app_menu (GTK_APPLICATION (app), app_menu);
+ g_object_unref (builder);
+}
+
+static void
+example_app_class_init (ExampleAppClass *class)
+{
+ G_APPLICATION_CLASS (class)->startup = example_app_startup;
+ ...
+}
+
+...
+
+ (full source)
+
+
+ Our preferences menu item does not do anything yet,
+ but the Quit menu item is fully functional. Note that it
+ can also be activated by the usual Ctrl-Q shortcut. The
+ shortcut was specified in the ui file.
+
+
+ The application menu looks like this:
+
+
+
+
+
+
+
+
+
+
+
+ A preference dialog
+
+ A typical application will have a some preferences that
+ should be remembered from one run to the next. Even for our
+ simple example application, we may want to change the font
+ that is used for the content.
+
+ We are going to use GSettings to store our preferences.
+ GSettings requires a schema that describes our settings:
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ Before we can make use of this schema in our application,
+ we need to compile it into the binary form that GSettings
+ expects. GIO provides macros
+ to do this in autotools-based projects.
+
+ Next, we need to connect our settings to the widgets
+ that they are supposed to control. One convenient way to do
+ this is to use GSettings bind functionality to bind settings
+ keys to object properties, as we do here for the transition
+ setting.
+
+
+ settings = g_settings_new ("org.gtk.exampleapp");
+
+ g_settings_bind (priv->settings, "transition",
+ priv->stack, "transition-type",
+ G_SETTINGS_BIND_DEFAULT);
+}
+
+...
+ ]]>
+ (full source)
+
+
+ The code to connect the font setting is a little more involved,
+ since there is no simple object property that it corresponds to, so
+ we are not going to go into that here.
+
+ At this point, the application will already react if you
+ change one of the settings, e.g. using the gsettings commandline
+ tool. Of course, we expect the application to provide a preference
+ dialog for these. So lets do that now. Our preference dialog will
+ be a subclass of GtkDialog, and we'll use the same techniques that
+ we've already seen: templates, private structs, settings
+ bindings.
+
+ Lets start with the template.
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ Next comes the dialog subclass.
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ Now we revisit the preferences_activated() function in our
+ application class, and make it open a new preference dialog.
+
+
+
+ (full source)
+
+
+ After all this work, our application can now show
+ a preference dialog like this:
+
+
+
+
+
+
+
+
+
+
+
+ Adding a search bar
+
+ We continue to flesh out the functionality of our application.
+ For now, we add search. GTK+ supports this with #GtkSearchEntry and
+ #GtkSearchBar. The search bar is a widget that can slide in from the
+ top to present a search entry.
+
+ We add a toggle button to the header bar, which can be used
+ to slide out the search bar below the header bar.
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ Implementing the search needs quite a few code changes that
+ we are not going to completely go over here. The central piece of
+ the search implementation is a signal handler that listens for
+ text changes in the search entry.
+
+
+ stack));
+ view = gtk_bin_get_child (GTK_BIN (tab));
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ /* Very simple-minded search implementation */
+ gtk_text_buffer_get_start_iter (buffer, &start);
+ if (gtk_text_iter_forward_search (&start, text, GTK_TEXT_SEARCH_CASE_INSENSITIVE,
+ &match_start, &match_end, NULL)) {
+ gtk_text_buffer_select_range (buffer, &match_start, &match_end);
+ gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (view), &match_start,
+ 0.0, FALSE, 0.0, 0.0);
+ }
+}
+
+static void
+example_app_window_init (ExampleAppWindow *win)
+{
+
+...
+
+ priv->text_changed_handler = g_signal_connect (priv->searchentry, "changed",
+ G_CALLBACK (search_text_changed), win);
+
+...
+
+}
+
+...
+ ]]>
+ (full source)
+
+
+ With the search bar, our application now looks like this:
+
+
+
+
+
+
+
+
+
+
+
+ Adding a side bar
+
+ As a last piece of functionality, we are adding a sidebar,
+ which demonstrates #GtkRevealer and #GtkListBox.
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ The code to populate the sidebar with buttons for the words
+ found in each file is a little too involved to go into here. But we'll
+ look at the code to add the gears menu.
+
+ As expected by now, the gears menu is specified in a GtkBuilder
+ ui file.
+
+
+ FIXME: MISSING XINCLUDE CONTENT
+
+
+ To connect the menuitem to the show-words setting,
+ we use a #GSettingsAction.
+
+
+ gears), menu);
+ g_object_unref (builder);
+
+ action = g_settings_create_action (priv->settings, "show-words");
+ g_action_map_add_action (G_ACTION_MAP (win), action);
+ g_object_unref (action);
+}
+
+...
+ ]]>
+ (full source)
+
+
+ What our application looks like now:
+
+
+
+
+
+
+
+
+
+
diff --git a/docs/reference/gtk/images/getting-started-app1.png b/docs/reference/gtk/images/getting-started-app1.png
new file mode 100644
index 0000000000..0897f432c2
Binary files /dev/null and b/docs/reference/gtk/images/getting-started-app1.png differ
diff --git a/docs/reference/gtk/images/getting-started-app2.png b/docs/reference/gtk/images/getting-started-app2.png
new file mode 100644
index 0000000000..db811779e9
Binary files /dev/null and b/docs/reference/gtk/images/getting-started-app2.png differ
diff --git a/docs/reference/gtk/images/getting-started-app3.png b/docs/reference/gtk/images/getting-started-app3.png
new file mode 100644
index 0000000000..e411d013bb
Binary files /dev/null and b/docs/reference/gtk/images/getting-started-app3.png differ
diff --git a/docs/reference/gtk/images/getting-started-app4.png b/docs/reference/gtk/images/getting-started-app4.png
new file mode 100644
index 0000000000..a02c974adb
Binary files /dev/null and b/docs/reference/gtk/images/getting-started-app4.png differ
diff --git a/docs/reference/gtk/images/getting-started-app6.png b/docs/reference/gtk/images/getting-started-app6.png
new file mode 100644
index 0000000000..7b7109dcf3
Binary files /dev/null and b/docs/reference/gtk/images/getting-started-app6.png differ
diff --git a/docs/reference/gtk/images/getting-started-app7.png b/docs/reference/gtk/images/getting-started-app7.png
new file mode 100644
index 0000000000..330864a191
Binary files /dev/null and b/docs/reference/gtk/images/getting-started-app7.png differ
diff --git a/docs/reference/gtk/images/getting-started-app8.png b/docs/reference/gtk/images/getting-started-app8.png
new file mode 100644
index 0000000000..8def204d95
Binary files /dev/null and b/docs/reference/gtk/images/getting-started-app8.png differ
diff --git a/examples/Makefile.am b/examples/Makefile.am
index c55a6a8e1e..f2fc8c46b6 100644
--- a/examples/Makefile.am
+++ b/examples/Makefile.am
@@ -1,39 +1,7 @@
-
-# these have a handrolled Makefile that gets in the way of distchecking
-# so they will not be included in tarballs until they get integrated
-# in the new 'getting started' section of the docs
-OLD_EXAMPLES = \
- arrow \
- aspectframe \
- base \
- buttonbox \
- buttons \
- calendar \
- entry \
- eventbox \
- fixed \
- frame \
- gtkdial \
- helloworld \
- helloworld2 \
- label \
- menu \
- notebook \
- packbox \
- paned \
- progressbar \
- radiobuttons \
- rangewidgets \
- rulers \
- scribble-simple \
- scribble-xinput \
- scrolledwin \
- selection \
- spinbutton \
- statusbar \
- table \
- tictactoe \
- wheelbarrow
+SUBDIRS = \
+ application1 application2 application3 \
+ application4 application5 application6 \
+ application7 application8
AM_CPPFLAGS = \
-I$(top_srcdir) \
diff --git a/examples/application1/Makefile b/examples/application1/Makefile
new file mode 100644
index 0000000000..4c309bef0d
--- /dev/null
+++ b/examples/application1/Makefile
@@ -0,0 +1,737 @@
+# Makefile.in generated by automake 1.13.4 from Makefile.am.
+# examples/application1/Makefile. Generated from Makefile.in by configure.
+
+# Copyright (C) 1994-2013 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+
+
+
+am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
+am__make_running_with_option = \
+ case $${target_option-} in \
+ ?) ;; \
+ *) echo "am__make_running_with_option: internal error: invalid" \
+ "target option '$${target_option-}' specified" >&2; \
+ exit 1;; \
+ esac; \
+ has_opt=no; \
+ sane_makeflags=$$MAKEFLAGS; \
+ if $(am__is_gnu_make); then \
+ sane_makeflags=$$MFLAGS; \
+ else \
+ case $$MAKEFLAGS in \
+ *\\[\ \ ]*) \
+ bs=\\; \
+ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
+ esac; \
+ fi; \
+ skip_next=no; \
+ strip_trailopt () \
+ { \
+ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+ }; \
+ for flg in $$sane_makeflags; do \
+ test $$skip_next = yes && { skip_next=no; continue; }; \
+ case $$flg in \
+ *=*|--*) continue;; \
+ -*I) strip_trailopt 'I'; skip_next=yes;; \
+ -*I?*) strip_trailopt 'I';; \
+ -*O) strip_trailopt 'O'; skip_next=yes;; \
+ -*O?*) strip_trailopt 'O';; \
+ -*l) strip_trailopt 'l'; skip_next=yes;; \
+ -*l?*) strip_trailopt 'l';; \
+ -[dEDm]) skip_next=yes;; \
+ -[JT]) skip_next=yes;; \
+ esac; \
+ case $$flg in \
+ *$$target_option*) has_opt=yes; break;; \
+ esac; \
+ done; \
+ test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/gtk+
+pkgincludedir = $(includedir)/gtk+
+pkglibdir = $(libdir)/gtk+
+pkglibexecdir = $(libexecdir)/gtk+
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = x86_64-unknown-linux-gnu
+host_triplet = x86_64-unknown-linux-gnu
+noinst_PROGRAMS = exampleapp$(EXEEXT)
+subdir = examples/application1
+DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
+ $(top_srcdir)/build-aux/depcomp
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/m4/ax_prog_cc_for_build.m4 \
+ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/libtool.m4 \
+ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
+ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
+ $(top_srcdir)/m4/pkg_config_for_build.m4 \
+ $(top_srcdir)/acinclude.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+ $(ACLOCAL_M4)
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/config.h
+CONFIG_CLEAN_FILES =
+CONFIG_CLEAN_VPATH_FILES =
+PROGRAMS = $(noinst_PROGRAMS)
+am_exampleapp_OBJECTS = main.$(OBJEXT) exampleapp.$(OBJEXT) \
+ exampleappwin.$(OBJEXT)
+exampleapp_OBJECTS = $(am_exampleapp_OBJECTS)
+exampleapp_LDADD = $(LDADD)
+am__DEPENDENCIES_1 =
+exampleapp_DEPENDENCIES = $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la $(am__DEPENDENCIES_1)
+AM_V_lt = $(am__v_lt_$(V))
+am__v_lt_ = $(am__v_lt_$(AM_DEFAULT_VERBOSITY))
+am__v_lt_0 = --silent
+am__v_lt_1 =
+AM_V_P = $(am__v_P_$(V))
+am__v_P_ = $(am__v_P_$(AM_DEFAULT_VERBOSITY))
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_$(V))
+am__v_GEN_ = $(am__v_GEN_$(AM_DEFAULT_VERBOSITY))
+am__v_GEN_0 = @echo " GEN " $@;
+am__v_GEN_1 =
+AM_V_at = $(am__v_at_$(V))
+am__v_at_ = $(am__v_at_$(AM_DEFAULT_VERBOSITY))
+am__v_at_0 = @
+am__v_at_1 =
+DEFAULT_INCLUDES = -I. -I$(top_builddir)
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__depfiles_maybe = depfiles
+am__mv = mv -f
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
+ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
+ $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_$(V))
+am__v_CC_ = $(am__v_CC_$(AM_DEFAULT_VERBOSITY))
+am__v_CC_0 = @echo " CC " $@;
+am__v_CC_1 =
+CCLD = $(CC)
+LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
+ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
+ $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_$(V))
+am__v_CCLD_ = $(am__v_CCLD_$(AM_DEFAULT_VERBOSITY))
+am__v_CCLD_0 = @echo " CCLD " $@;
+am__v_CCLD_1 =
+SOURCES = $(exampleapp_SOURCES)
+DIST_SOURCES = $(exampleapp_SOURCES)
+am__can_run_installinfo = \
+ case $$AM_UPDATE_INFO_DIR in \
+ n|no|NO) false;; \
+ *) (install-info --version) >/dev/null 2>&1;; \
+ esac
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates. Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+ BEGIN { nonempty = 0; } \
+ { items[$$0] = 1; nonempty = 1; } \
+ END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique. This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+ list='$(am__tagged_files)'; \
+ unique=`for i in $$list; do \
+ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+ done | $(am__uniquify_input)`
+ETAGS = etags
+CTAGS = ctags
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+ACLOCAL = ${SHELL} /home/mclasen/Sources/gtk+/build-aux/missing aclocal-1.13
+AMTAR = $${TAR-tar}
+AM_DEFAULT_VERBOSITY = 0
+AR = ar
+AS = as
+ATK_CFLAGS = -I/home/mclasen/gnome/include/atk-1.0 -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include -I/home/mclasen/gnome/include/at-spi2-atk/2.0
+ATK_LIBS = -L/home/mclasen/gnome/lib64 -latk-1.0 -lgobject-2.0 -lglib-2.0 -latk-bridge-2.0
+ATK_PREFIX = /home/mclasen/gnome
+ATK_REQUIRED_VERSION = 2.7.5
+AUTOCONF = ${SHELL} /home/mclasen/Sources/gtk+/build-aux/missing autoconf
+AUTOHEADER = ${SHELL} /home/mclasen/Sources/gtk+/build-aux/missing autoheader
+AUTOMAKE = ${SHELL} /home/mclasen/Sources/gtk+/build-aux/missing automake-1.13
+AWK = gawk
+BASE_DEPENDENCIES_CFLAGS = -pthread -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include -I/home/mclasen/gnome/include/atk-1.0 -I/home/mclasen/gnome/include/pango-1.0 -I/home/mclasen/gnome/include/cairo -I/home/mclasen/gnome/include/pixman-1 -I/home/mclasen/gnome/include/gdk-pixbuf-2.0 -I/usr/include/freetype2 -I/usr/include/libpng15
+BASE_DEPENDENCIES_LIBS = -L/home/mclasen/gnome/lib64 -latk-1.0 -lpango-1.0 -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0
+BUILD_EXEEXT =
+BUILD_OBJEXT =
+CAIRO_BACKEND_CFLAGS = -I/home/mclasen/gnome/include/cairo -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include -I/home/mclasen/gnome/include/pixman-1 -I/usr/include/freetype2 -I/usr/include/libpng15
+CAIRO_BACKEND_LIBS = -L/home/mclasen/gnome/lib64 -lX11 -lXext -lcairo
+CAIRO_PREFIX = /home/mclasen/gnome
+CAIRO_REQUIRED_VERSION = 1.10.0
+CATALOGS = af.gmo am.gmo an.gmo ang.gmo ar.gmo as.gmo ast.gmo az.gmo az_IR.gmo be.gmo be@latin.gmo bg.gmo bn.gmo bn_IN.gmo br.gmo bs.gmo ca.gmo ca@valencia.gmo crh.gmo cs.gmo cy.gmo da.gmo de.gmo dz.gmo el.gmo en.gmo en_CA.gmo en_GB.gmo en@shaw.gmo eo.gmo es.gmo et.gmo eu.gmo fa.gmo fi.gmo fr.gmo ga.gmo gl.gmo gu.gmo he.gmo hi.gmo hr.gmo hu.gmo hy.gmo ia.gmo id.gmo io.gmo is.gmo it.gmo ja.gmo ka.gmo kg.gmo kk.gmo km.gmo kn.gmo ko.gmo ku.gmo ky.gmo lg.gmo li.gmo lt.gmo lv.gmo mai.gmo mi.gmo mk.gmo ml.gmo mn.gmo mr.gmo ms.gmo my.gmo nb.gmo nds.gmo ne.gmo nl.gmo nn.gmo nso.gmo oc.gmo or.gmo pa.gmo pl.gmo ps.gmo pt.gmo pt_BR.gmo ro.gmo ru.gmo rw.gmo si.gmo sk.gmo sl.gmo sq.gmo sr.gmo sr@ije.gmo sr@latin.gmo sv.gmo ta.gmo te.gmo tg.gmo th.gmo tk.gmo tr.gmo tt.gmo ug.gmo uk.gmo ur.gmo uz.gmo uz@cyrillic.gmo vi.gmo wa.gmo xh.gmo yi.gmo zh_CN.gmo zh_HK.gmo zh_TW.gmo
+CATOBJEXT = .gmo
+CC = gcc
+CCAS = gcc
+CCASDEPMODE = depmode=gcc3
+CCASFLAGS = -g -O2
+CCDEPMODE = depmode=gcc3
+CC_FOR_BUILD = gcc
+CFLAGS = -g -O2 -g -Wall
+CFLAGS_FOR_BUILD = -g -O2
+COLORD_CFLAGS = -pthread -I/home/mclasen/gnome/include/colord-1 -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include -I/usr/include/dbus-1.0 -I/usr/lib64/dbus-1.0/include
+COLORD_LIBS = -L/home/mclasen/gnome/lib64 -lcolord -lcolordprivate -lgio-2.0 -lgobject-2.0 -lglib-2.0
+CPP = gcc -E
+CPPFLAGS =
+CPPFLAGS_FOR_BUILD =
+CPP_FOR_BUILD = gcc -E
+CUPS_API_MAJOR = 1
+CUPS_API_MINOR = 6
+CUPS_CFLAGS =
+CUPS_CONFIG = /usr/bin/cups-config
+CUPS_LIBS = -lcups -lgssapi_krb5 -lkrb5 -lk5crypto -lcom_err -lz -lpthread -lm -lcrypt -lz
+CXX = c++
+CXXCPP = c++ -E
+CXXDEPMODE = depmode=gcc3
+CXXFLAGS = -g -O2
+CYGPATH_W = echo
+DATADIRNAME = share
+DEFS = -DHAVE_CONFIG_H
+DEPDIR = .deps
+DISABLE_ON_QUARTZ =
+DISABLE_ON_W32 =
+DISABLE_ON_WAYLAND = %
+DLLTOOL = false
+DSYMUTIL =
+DUMPBIN =
+ECHO_C =
+ECHO_N = -n
+ECHO_T =
+EGREP = /usr/bin/grep -E
+EXEEXT =
+EXE_MANIFEST_ARCHITECTURE = X86
+FGREP = /usr/bin/grep -F
+GAIL_INET_LIBS =
+GAIL_LT_CURRENT_MINUS_AGE = 0
+GAIL_LT_VERSION_INFO = 0:0:0
+GDK_BACKENDS = x11 wayland
+GDK_DEP_CFLAGS = -pthread -I/home/mclasen/gnome/include/pango-1.0 -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include -I/home/mclasen/gnome/include/cairo -I/home/mclasen/gnome/include/pixman-1 -I/home/mclasen/gnome/include/gdk-pixbuf-2.0 -I/home/mclasen/gnome/include/gio-unix-2.0/ -I/home/mclasen/gnome/include/harfbuzz -I/usr/include/freetype2 -I/usr/include/libpng15
+GDK_DEP_LIBS = -L/home/mclasen/gnome/lib64 -lpangocairo-1.0 -lgdk_pixbuf-2.0 -lcairo-gobject -lgio-2.0 -lXinerama -lXi -lXrandr -lXcursor -lXcomposite -lXdamage -lXfixes -lwayland-client -lxkbcommon -lwayland-cursor -lX11 -lXext -lcairo -lpangoft2-1.0 -lpango-1.0 -lfreetype -lfontconfig -lgobject-2.0 -lglib-2.0 -lm
+GDK_EXTRA_CFLAGS =
+GDK_EXTRA_LIBS =
+GDK_HIDDEN_VISIBILITY_CFLAGS = -fvisibility=hidden
+GDK_PACKAGES = pango pangocairo gdk-pixbuf-2.0 cairo cairo-gobject
+GDK_PIXBUF_CSOURCE = /home/mclasen/gnome/bin/gdk-pixbuf-csource
+GDK_PIXBUF_LIBS = -L/home/mclasen/gnome/lib64 -lgdk_pixbuf-2.0 -lgobject-2.0 -lglib-2.0
+GDK_PIXBUF_REQUIRED_VERSION = 2.27.1
+GDK_PRIVATE_PACKAGES = gio-unix-2.0 fontconfig x11 xext xinerama xi xrandr xcursor xfixes xcomposite xdamage wayland-client >= 1.1.90 xkbcommon >= 0.2.0 wayland-cursor cairo-xlib cairo pangoft2
+GETTEXT_PACKAGE = gtk30
+GLIB_CFLAGS = -pthread -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include
+GLIB_CFLAGS_FOR_BUILD = -pthread -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include
+GLIB_COMPILE_RESOURCES = glib-compile-resources
+GLIB_COMPILE_SCHEMAS = glib-compile-schemas
+GLIB_GENMARSHAL = glib-genmarshal
+GLIB_LIBS = -pthread -L/home/mclasen/gnome/lib64 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0
+GLIB_LIBS_FOR_BUILD = -pthread -L/home/mclasen/gnome/lib64 -lgobject-2.0 -lgmodule-2.0 -lglib-2.0
+GLIB_MKENUMS = glib-mkenums
+GLIB_PREFIX = /home/mclasen/gnome
+GLIB_REQUIRED_VERSION = 2.37.3
+GMODULE_CFLAGS = -pthread -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include
+GMODULE_LIBS = -Wl,--export-dynamic -pthread -L/home/mclasen/gnome/lib64 -lgmodule-2.0 -lglib-2.0
+GMOFILES = af.gmo am.gmo an.gmo ang.gmo ar.gmo as.gmo ast.gmo az.gmo az_IR.gmo be.gmo be@latin.gmo bg.gmo bn.gmo bn_IN.gmo br.gmo bs.gmo ca.gmo ca@valencia.gmo crh.gmo cs.gmo cy.gmo da.gmo de.gmo dz.gmo el.gmo en.gmo en_CA.gmo en_GB.gmo en@shaw.gmo eo.gmo es.gmo et.gmo eu.gmo fa.gmo fi.gmo fr.gmo ga.gmo gl.gmo gu.gmo he.gmo hi.gmo hr.gmo hu.gmo hy.gmo ia.gmo id.gmo io.gmo is.gmo it.gmo ja.gmo ka.gmo kg.gmo kk.gmo km.gmo kn.gmo ko.gmo ku.gmo ky.gmo lg.gmo li.gmo lt.gmo lv.gmo mai.gmo mi.gmo mk.gmo ml.gmo mn.gmo mr.gmo ms.gmo my.gmo nb.gmo nds.gmo ne.gmo nl.gmo nn.gmo nso.gmo oc.gmo or.gmo pa.gmo pl.gmo ps.gmo pt.gmo pt_BR.gmo ro.gmo ru.gmo rw.gmo si.gmo sk.gmo sl.gmo sq.gmo sr.gmo sr@ije.gmo sr@latin.gmo sv.gmo ta.gmo te.gmo tg.gmo th.gmo tk.gmo tr.gmo tt.gmo ug.gmo uk.gmo ur.gmo uz.gmo uz@cyrillic.gmo vi.gmo wa.gmo xh.gmo yi.gmo zh_CN.gmo zh_HK.gmo zh_TW.gmo
+GMSGFMT = /usr/bin/msgfmt
+GOBJECT_QUERY = gobject-query
+GREP = /usr/bin/grep
+GSETTINGS_DISABLE_SCHEMAS_COMPILE =
+GTKDOC_CHECK = /home/mclasen/gnome/bin/gtkdoc-check
+GTKDOC_DEPS_CFLAGS = -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include
+GTKDOC_DEPS_LIBS = -L/home/mclasen/gnome/lib64 -lgobject-2.0 -lglib-2.0
+GTKDOC_MKPDF = /home/mclasen/gnome/bin/gtkdoc-mkpdf
+GTKDOC_REBASE = /home/mclasen/gnome/bin/gtkdoc-rebase
+GTK_API_VERSION = 3.0
+GTK_BINARY_AGE = 909
+GTK_BINARY_VERSION = 3.0.0
+GTK_DEBUG_FLAGS = -DG_ENABLE_DEBUG
+GTK_DEP_CFLAGS = -pthread -I/home/mclasen/gnome/include/pango-1.0 -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include -I/home/mclasen/gnome/include/cairo -I/home/mclasen/gnome/include/pixman-1 -I/home/mclasen/gnome/include/atk-1.0 -I/home/mclasen/gnome/include/gdk-pixbuf-2.0 -I/home/mclasen/gnome/include/at-spi2-atk/2.0 -I/home/mclasen/gnome/include/harfbuzz -I/home/mclasen/gnome/include/gio-unix-2.0/ -I/usr/include/freetype2 -I/usr/include/libpng15
+GTK_DEP_LIBS = -L/home/mclasen/gnome/lib64 -lpangocairo-1.0 -lX11 -lXi -lXcomposite -lXdamage -lXfixes -lcairo-gobject -lcairo -lgdk_pixbuf-2.0 -latk-1.0 -latk-bridge-2.0 -lpangoft2-1.0 -lpango-1.0 -lfreetype -lfontconfig -lgio-2.0 -lgobject-2.0 -lglib-2.0 -lm
+GTK_EXTRA_CFLAGS =
+GTK_EXTRA_LIBS =
+GTK_INTERFACE_AGE = 0
+GTK_LINK_FLAGS = -Wl,-Bsymbolic-functions
+GTK_MAJOR_VERSION = 3
+GTK_MICRO_VERSION = 9
+GTK_MINOR_VERSION = 9
+GTK_PACKAGES = atk cairo cairo-gobject gdk-pixbuf-2.0 gio-2.0
+GTK_PRIVATE_PACKAGES = atk atk-bridge-2.0 pangoft2 gio-unix-2.0
+GTK_UPDATE_ICON_CACHE =
+GTK_VERSION = 3.9.9
+GTK_XIM_FLAGS =
+HAVE_HTTP_AUTHSTRING =
+HTML_DIR = ${datadir}/gtk-doc/html
+INCLUDED_IMMODULE_DEFINE =
+INCLUDED_IMMODULE_OBJ =
+INSTALL = /usr/bin/install -c
+INSTALL_DATA = ${INSTALL} -m 644
+INSTALL_PROGRAM = ${INSTALL}
+INSTALL_SCRIPT = ${INSTALL}
+INSTALL_STRIP_PROGRAM = $(install_sh) -c -s
+INSTOBJEXT = .mo
+INTLLIBS =
+INTROSPECTION_CFLAGS = -pthread -I/home/mclasen/gnome/include/gobject-introspection-1.0 -I/home/mclasen/gnome/include/glib-2.0 -I/home/mclasen/gnome/lib64/glib-2.0/include
+INTROSPECTION_COMPILER = /home/mclasen/gnome/bin/g-ir-compiler
+INTROSPECTION_GENERATE = /home/mclasen/gnome/bin/g-ir-generate
+INTROSPECTION_GIRDIR = /home/mclasen/gnome/share/gir-1.0
+INTROSPECTION_LIBS = -L/home/mclasen/gnome/lib64 -lgirepository-1.0 -lgobject-2.0 -lglib-2.0
+INTROSPECTION_MAKEFILE = /home/mclasen/gnome/share/gobject-introspection-1.0/Makefile.introspection
+INTROSPECTION_REQUIRED_VERSION = 1.32.0
+INTROSPECTION_SCANNER = /home/mclasen/gnome/bin/g-ir-scanner
+INTROSPECTION_TYPELIBDIR = /home/mclasen/gnome/lib64/girepository-1.0
+LD = /usr/bin/ld -m elf_x86_64
+LDFLAGS = -L/home/mclasen/gnome/lib64
+LDFLAGS_FOR_BUILD =
+LIBOBJS =
+LIBS =
+LIBTOOL = $(SHELL) $(top_builddir)/libtool
+LIB_EXE_MACHINE_FLAG = X86
+LIPO =
+LN_S = ln -s
+LTLIBOBJS =
+LT_CURRENT_MINUS_AGE = 0
+LT_VERSION_INFO = 909:0:909
+MAINT =
+MAKEINFO = ${SHELL} /home/mclasen/Sources/gtk+/build-aux/missing makeinfo
+MANIFEST_TOOL = :
+MATH_LIB = -lm
+MKDIR_P = /usr/bin/mkdir -p
+MKINSTALLDIRS = build-aux/mkinstalldirs
+MSGFMT = /usr/bin/msgfmt
+MSGFMT_OPTS = -c
+NATIVE_GDKPIXBUF_CFLAGS =
+NATIVE_GDKPIXBUF_LIBS =
+NM = /usr/bin/nm -B
+NMEDIT =
+OBJDUMP = objdump
+OBJEXT = o
+OTOOL =
+OTOOL64 =
+PACKAGE = gtk+
+PACKAGE_BUGREPORT = http://bugzilla.gnome.org/enter_bug.cgi?product=gtk%2B
+PACKAGE_NAME = gtk+
+PACKAGE_STRING = gtk+ 3.9.9
+PACKAGE_TARNAME = gtk+
+PACKAGE_URL =
+PACKAGE_VERSION = 3.9.9
+PANGO_PREFIX = /home/mclasen/gnome
+PANGO_REQUIRED_VERSION = 1.32.4
+PATH_SEPARATOR = :
+PERL = /usr/bin/perl
+PKG_CONFIG = /usr/bin/pkg-config
+PKG_CONFIG_FOR_BUILD = /usr/bin/pkg-config
+PKG_CONFIG_LIBDIR =
+PKG_CONFIG_PATH = /home/mclasen/gnome/lib64/pkgconfig:/home/mclasen/gnome/share/pkgconfig:/usr/lib64/pkgconfig:/usr/lib/pkgconfig:/usr/share/pkgconfig
+POFILES = af.po am.po an.po ang.po ar.po as.po ast.po az.po az_IR.po be.po be@latin.po bg.po bn.po bn_IN.po br.po bs.po ca.po ca@valencia.po crh.po cs.po cy.po da.po de.po dz.po el.po en.po en_CA.po en_GB.po en@shaw.po eo.po es.po et.po eu.po fa.po fi.po fr.po ga.po gl.po gu.po he.po hi.po hr.po hu.po hy.po ia.po id.po io.po is.po it.po ja.po ka.po kg.po kk.po km.po kn.po ko.po ku.po ky.po lg.po li.po lt.po lv.po mai.po mi.po mk.po ml.po mn.po mr.po ms.po my.po nb.po nds.po ne.po nl.po nn.po nso.po oc.po or.po pa.po pl.po ps.po pt.po pt_BR.po ro.po ru.po rw.po si.po sk.po sl.po sq.po sr.po sr@ije.po sr@latin.po sv.po ta.po te.po tg.po th.po tk.po tr.po tt.po ug.po uk.po ur.po uz.po uz@cyrillic.po vi.po wa.po xh.po yi.po zh_CN.po zh_HK.po zh_TW.po
+POSUB = po
+PO_IN_DATADIR_FALSE =
+PO_IN_DATADIR_TRUE =
+RANLIB = ranlib
+SED = /usr/bin/sed
+SET_MAKE =
+SHELL = /bin/sh
+STRIP = strip
+USE_NLS = yes
+VERSION = 3.9.9
+WINDRES =
+XGETTEXT = /usr/bin/xgettext
+XMKMF =
+XMLCATALOG = /usr/bin/xmlcatalog
+XML_CATALOG_FILE = /etc/xml/catalog
+XSLTPROC = /usr/bin/xsltproc
+X_CFLAGS =
+X_EXTRA_LIBS =
+X_LIBS =
+X_PRE_LIBS =
+abs_builddir = /home/mclasen/Sources/gtk+/examples/application1
+abs_srcdir = /home/mclasen/Sources/gtk+/examples/application1
+abs_top_builddir = /home/mclasen/Sources/gtk+
+abs_top_srcdir = /home/mclasen/Sources/gtk+
+ac_ct_AR = ar
+ac_ct_CC = gcc
+ac_ct_CC_FOR_BUILD = gcc
+ac_ct_CXX = c++
+ac_ct_DUMPBIN =
+am__include = include
+am__leading_dot = .
+am__quote =
+am__tar = tar --format=ustar -chf - "$$tardir"
+am__untar = tar -xf -
+bindir = ${exec_prefix}/bin
+build = x86_64-unknown-linux-gnu
+build_alias =
+build_cpu = x86_64
+build_os = linux-gnu
+build_vendor = unknown
+builddir = .
+datadir = ${datarootdir}
+datarootdir = ${prefix}/share
+docdir = ${datarootdir}/doc/${PACKAGE_TARNAME}
+dvidir = ${docdir}
+exec_prefix = ${prefix}
+gsettingsschemadir = ${datarootdir}/glib-2.0/schemas
+host = x86_64-unknown-linux-gnu
+host_alias =
+host_cpu = x86_64
+host_os = linux-gnu
+host_vendor = unknown
+htmldir = ${docdir}
+includedir = ${prefix}/include
+infodir = ${datarootdir}/info
+install_sh = ${SHELL} /home/mclasen/Sources/gtk+/build-aux/install-sh
+libdir = /home/mclasen/gnome/lib64
+libexecdir = ${exec_prefix}/libexec
+localedir = /home/mclasen/gnome/share/locale
+localstatedir = ${prefix}/var
+mandir = ${datarootdir}/man
+mkdir_p = $(MKDIR_P)
+ms_librarian =
+oldincludedir = /usr/include
+pdfdir = ${docdir}
+prefix = /home/mclasen/gnome
+program_transform_name = s,x,x,
+psdir = ${docdir}
+sbindir = ${exec_prefix}/sbin
+sharedstatedir = ${prefix}/com
+srcdir = .
+sysconfdir = ${prefix}/etc
+target_alias =
+top_build_prefix = ../../
+top_builddir = ../..
+top_srcdir = ../..
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
+ -I$(top_builddir)/gdk \
+ $(GTK_DEBUG_FLAGS) \
+ $(GTK_DEP_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la \
+ $(GTK_DEP_LIBS)
+
+exampleapp_SOURCES = \
+ main.c \
+ exampleapp.c exampleapp.h \
+ exampleappwin.c exampleappwin.h
+
+all: all-am
+
+.SUFFIXES:
+.SUFFIXES: .c .lo .o .obj
+$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
+ @for dep in $?; do \
+ case '$(am__configure_deps)' in \
+ *$$dep*) \
+ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
+ && { if test -f $@; then exit 0; else break; fi; }; \
+ exit 1;; \
+ esac; \
+ done; \
+ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu examples/application1/Makefile'; \
+ $(am__cd) $(top_srcdir) && \
+ $(AUTOMAKE) --gnu examples/application1/Makefile
+.PRECIOUS: Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+ @case '$?' in \
+ *config.status*) \
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
+ *) \
+ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
+ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
+ esac;
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+
+$(top_srcdir)/configure: $(am__configure_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(ACLOCAL_M4): $(am__aclocal_m4_deps)
+ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
+$(am__aclocal_m4_deps):
+
+clean-noinstPROGRAMS:
+ @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \
+ echo " rm -f" $$list; \
+ rm -f $$list || exit $$?; \
+ test -n "$(EXEEXT)" || exit 0; \
+ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \
+ echo " rm -f" $$list; \
+ rm -f $$list
+
+exampleapp$(EXEEXT): $(exampleapp_OBJECTS) $(exampleapp_DEPENDENCIES) $(EXTRA_exampleapp_DEPENDENCIES)
+ @rm -f exampleapp$(EXEEXT)
+ $(AM_V_CCLD)$(LINK) $(exampleapp_OBJECTS) $(exampleapp_LDADD) $(LIBS)
+
+mostlyclean-compile:
+ -rm -f *.$(OBJEXT)
+
+distclean-compile:
+ -rm -f *.tab.c
+
+include ./$(DEPDIR)/exampleapp.Po
+include ./$(DEPDIR)/exampleappwin.Po
+include ./$(DEPDIR)/main.Po
+
+.c.o:
+ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+# $(AM_V_CC)source='$<' object='$@' libtool=no \
+# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+# $(AM_V_CC_no)$(COMPILE) -c $<
+
+.c.obj:
+ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
+ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
+# $(AM_V_CC)source='$<' object='$@' libtool=no \
+# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+# $(AM_V_CC_no)$(COMPILE) -c `$(CYGPATH_W) '$<'`
+
+.c.lo:
+ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
+ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
+# $(AM_V_CC)source='$<' object='$@' libtool=yes \
+# DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) \
+# $(AM_V_CC_no)$(LTCOMPILE) -c -o $@ $<
+
+mostlyclean-libtool:
+ -rm -f *.lo
+
+clean-libtool:
+ -rm -rf .libs _libs
+
+ID: $(am__tagged_files)
+ $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ set x; \
+ here=`pwd`; \
+ $(am__define_uniq_tagged_files); \
+ shift; \
+ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+ test -n "$$unique" || unique=$$empty_fix; \
+ if test $$# -gt 0; then \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ "$$@" $$unique; \
+ else \
+ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+ $$unique; \
+ fi; \
+ fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+ $(am__define_uniq_tagged_files); \
+ test -z "$(CTAGS_ARGS)$$unique" \
+ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+ $$unique
+
+GTAGS:
+ here=`$(am__cd) $(top_builddir) && pwd` \
+ && $(am__cd) $(top_srcdir) \
+ && gtags -i $(GTAGS_ARGS) "$$here"
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+ list='$(am__tagged_files)'; \
+ case "$(srcdir)" in \
+ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+ *) sdir=$(subdir)/$(srcdir) ;; \
+ esac; \
+ for i in $$list; do \
+ if test -f "$$i"; then \
+ echo "$(subdir)/$$i"; \
+ else \
+ echo "$$sdir/$$i"; \
+ fi; \
+ done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+ -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+
+distdir: $(DISTFILES)
+ @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+ list='$(DISTFILES)'; \
+ dist_files=`for file in $$list; do echo $$file; done | \
+ sed -e "s|^$$srcdirstrip/||;t" \
+ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+ case $$dist_files in \
+ */*) $(MKDIR_P) `echo "$$dist_files" | \
+ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+ sort -u` ;; \
+ esac; \
+ for file in $$dist_files; do \
+ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+ if test -d $$d/$$file; then \
+ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+ if test -d "$(distdir)/$$file"; then \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+ fi; \
+ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+ else \
+ test -f "$(distdir)/$$file" \
+ || cp -p $$d/$$file "$(distdir)/$$file" \
+ || exit 1; \
+ fi; \
+ done
+check-am: all-am
+check: check-am
+all-am: Makefile $(PROGRAMS)
+installdirs:
+install: install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+ @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+ if test -z '$(STRIP)'; then \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ install; \
+ else \
+ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+ fi
+mostlyclean-generic:
+
+clean-generic:
+
+distclean-generic:
+ -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+ -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+
+maintainer-clean-generic:
+ @echo "This command is intended for maintainers to use"
+ @echo "it deletes files that may require special tools to rebuild."
+clean: clean-am
+
+clean-am: clean-generic clean-libtool clean-noinstPROGRAMS \
+ mostlyclean-am
+
+distclean: distclean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+ distclean-tags
+
+dvi: dvi-am
+
+dvi-am:
+
+html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am:
+
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am:
+
+install-html: install-html-am
+
+install-html-am:
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man:
+
+install-pdf: install-pdf-am
+
+install-pdf-am:
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+ -rm -rf ./$(DEPDIR)
+ -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+ mostlyclean-libtool
+
+pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am:
+
+.MAKE: install-am install-strip
+
+.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
+ clean-libtool clean-noinstPROGRAMS cscopelist-am ctags \
+ ctags-am distclean distclean-compile distclean-generic \
+ distclean-libtool distclean-tags distdir dvi dvi-am html \
+ html-am info info-am install install-am install-data \
+ install-data-am install-dvi install-dvi-am install-exec \
+ install-exec-am install-html install-html-am install-info \
+ install-info-am install-man install-pdf install-pdf-am \
+ install-ps install-ps-am install-strip installcheck \
+ installcheck-am installdirs maintainer-clean \
+ maintainer-clean-generic mostlyclean mostlyclean-compile \
+ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
+ tags tags-am uninstall uninstall-am
+
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/examples/application1/Makefile.am b/examples/application1/Makefile.am
new file mode 100644
index 0000000000..27865c8d18
--- /dev/null
+++ b/examples/application1/Makefile.am
@@ -0,0 +1,19 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
+ -I$(top_builddir)/gdk \
+ $(GTK_DEBUG_FLAGS) \
+ $(GTK_DEP_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la \
+ $(GTK_DEP_LIBS)
+
+
+noinst_PROGRAMS = exampleapp
+
+exampleapp_SOURCES = \
+ main.c \
+ exampleapp.c exampleapp.h \
+ exampleappwin.c exampleappwin.h
diff --git a/examples/application1/exampleapp.c b/examples/application1/exampleapp.c
new file mode 100644
index 0000000000..bdd6a778e0
--- /dev/null
+++ b/examples/application1/exampleapp.c
@@ -0,0 +1,66 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+
+struct ExampleApp {
+ GtkApplication parent;
+};
+
+struct ExampleAppClass {
+ GtkApplicationClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleApp, example_app, GTK_TYPE_APPLICATION);
+
+static void
+example_app_init (ExampleApp *app)
+{
+}
+
+static void
+example_app_activate (GApplication *app)
+{
+ ExampleAppWindow *win;
+
+ win = example_app_window_new (EXAMPLE_APP (app));
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_open (GApplication *app,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GList *windows;
+ ExampleAppWindow *win;
+ int i;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows)
+ win = EXAMPLE_APP_WINDOW (windows->data);
+ else
+ win = example_app_window_new (EXAMPLE_APP (app));
+
+ for (i = 0; i < n_files; i++)
+ example_app_window_open (win, files[i]);
+
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_class_init (ExampleAppClass *class)
+{
+ G_APPLICATION_CLASS (class)->activate = example_app_activate;
+ G_APPLICATION_CLASS (class)->open = example_app_open;
+}
+
+ExampleApp *
+example_app_new (void)
+{
+ return g_object_new (EXAMPLE_APP_TYPE,
+ "application-id", "org.gtk.exampleapp",
+ "flags", G_APPLICATION_HANDLES_OPEN,
+ NULL);
+}
diff --git a/examples/application1/exampleapp.h b/examples/application1/exampleapp.h
new file mode 100644
index 0000000000..8b51c598ea
--- /dev/null
+++ b/examples/application1/exampleapp.h
@@ -0,0 +1,19 @@
+#ifndef __EXAMPLEAPP_H
+#define __EXAMPLEAPP_H
+
+#include
+
+
+#define EXAMPLE_APP_TYPE (example_app_get_type ())
+#define EXAMPLE_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_TYPE, ExampleApp))
+
+
+typedef struct ExampleApp ExampleApp;
+typedef struct ExampleAppClass ExampleAppClass;
+
+
+GType example_app_get_type (void);
+ExampleApp *example_app_new (void);
+
+
+#endif /* __EXAMPLEAPP_H */
diff --git a/examples/application1/exampleappwin.c b/examples/application1/exampleappwin.c
new file mode 100644
index 0000000000..9fc326acf0
--- /dev/null
+++ b/examples/application1/exampleappwin.c
@@ -0,0 +1,35 @@
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include
+
+struct ExampleAppWindow {
+ GtkApplicationWindow parent;
+};
+
+struct ExampleAppWindowClass {
+ GtkApplicationWindowClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW);
+
+static void
+example_app_window_init (ExampleAppWindow *app)
+{
+}
+
+static void
+example_app_window_class_init (ExampleAppWindowClass *class)
+{
+}
+
+ExampleAppWindow *
+example_app_window_new (ExampleApp *app)
+{
+ return g_object_new (EXAMPLE_APP_WINDOW_TYPE, "application", app, NULL);
+}
+
+void
+example_app_window_open (ExampleAppWindow *win,
+ GFile *file)
+{
+}
diff --git a/examples/application1/exampleappwin.h b/examples/application1/exampleappwin.h
new file mode 100644
index 0000000000..11ff3c27a7
--- /dev/null
+++ b/examples/application1/exampleappwin.h
@@ -0,0 +1,22 @@
+#ifndef __EXAMPLEAPPWIN_H
+#define __EXAMPLEAPPWIN_H
+
+#include
+#include "exampleapp.h"
+
+
+#define EXAMPLE_APP_WINDOW_TYPE (example_app_window_get_type ())
+#define EXAMPLE_APP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_WINDOW_TYPE, ExampleAppWindow))
+
+
+typedef struct ExampleAppWindow ExampleAppWindow;
+typedef struct ExampleAppWindowClass ExampleAppWindowClass;
+
+
+GType example_app_window_get_type (void);
+ExampleAppWindow *example_app_window_new (ExampleApp *app);
+void example_app_window_open (ExampleAppWindow *win,
+ GFile *file);
+
+
+#endif /* __EXAMPLEAPPWIN_H */
diff --git a/examples/application1/main.c b/examples/application1/main.c
new file mode 100644
index 0000000000..7c24d8b04e
--- /dev/null
+++ b/examples/application1/main.c
@@ -0,0 +1,8 @@
+#include
+#include
+
+int
+main (int argc, char *argv[])
+{
+ return g_application_run (G_APPLICATION (example_app_new ()), argc, argv);
+}
diff --git a/examples/application2/Makefile.am b/examples/application2/Makefile.am
new file mode 100644
index 0000000000..91e3c1903c
--- /dev/null
+++ b/examples/application2/Makefile.am
@@ -0,0 +1,30 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
+ -I$(top_builddir)/gdk \
+ $(GTK_DEBUG_FLAGS) \
+ $(GTK_DEP_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la \
+ $(GTK_DEP_LIBS)
+
+
+noinst_PROGRAMS = exampleapp
+
+exampleapp_SOURCES = \
+ main.c \
+ exampleapp.c exampleapp.h \
+ exampleappwin.c exampleappwin.h \
+ resources.c
+
+BUILT_SOURCES = resources.c
+
+resources.c: exampleapp.gresource.xml window.ui
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
+ --target=$@ --sourcedir=$(srcdir) --generate-source
+
+EXTRA_DIST = \
+ window.ui \
+ exampleapp.gresource.xml
diff --git a/examples/application2/exampleapp.c b/examples/application2/exampleapp.c
new file mode 100644
index 0000000000..bdd6a778e0
--- /dev/null
+++ b/examples/application2/exampleapp.c
@@ -0,0 +1,66 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+
+struct ExampleApp {
+ GtkApplication parent;
+};
+
+struct ExampleAppClass {
+ GtkApplicationClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleApp, example_app, GTK_TYPE_APPLICATION);
+
+static void
+example_app_init (ExampleApp *app)
+{
+}
+
+static void
+example_app_activate (GApplication *app)
+{
+ ExampleAppWindow *win;
+
+ win = example_app_window_new (EXAMPLE_APP (app));
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_open (GApplication *app,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GList *windows;
+ ExampleAppWindow *win;
+ int i;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows)
+ win = EXAMPLE_APP_WINDOW (windows->data);
+ else
+ win = example_app_window_new (EXAMPLE_APP (app));
+
+ for (i = 0; i < n_files; i++)
+ example_app_window_open (win, files[i]);
+
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_class_init (ExampleAppClass *class)
+{
+ G_APPLICATION_CLASS (class)->activate = example_app_activate;
+ G_APPLICATION_CLASS (class)->open = example_app_open;
+}
+
+ExampleApp *
+example_app_new (void)
+{
+ return g_object_new (EXAMPLE_APP_TYPE,
+ "application-id", "org.gtk.exampleapp",
+ "flags", G_APPLICATION_HANDLES_OPEN,
+ NULL);
+}
diff --git a/examples/application2/exampleapp.gresource.xml b/examples/application2/exampleapp.gresource.xml
new file mode 100644
index 0000000000..175264c7c0
--- /dev/null
+++ b/examples/application2/exampleapp.gresource.xml
@@ -0,0 +1,6 @@
+
+
+
+ window.ui
+
+
diff --git a/examples/application2/exampleapp.h b/examples/application2/exampleapp.h
new file mode 100644
index 0000000000..8b51c598ea
--- /dev/null
+++ b/examples/application2/exampleapp.h
@@ -0,0 +1,19 @@
+#ifndef __EXAMPLEAPP_H
+#define __EXAMPLEAPP_H
+
+#include
+
+
+#define EXAMPLE_APP_TYPE (example_app_get_type ())
+#define EXAMPLE_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_TYPE, ExampleApp))
+
+
+typedef struct ExampleApp ExampleApp;
+typedef struct ExampleAppClass ExampleAppClass;
+
+
+GType example_app_get_type (void);
+ExampleApp *example_app_new (void);
+
+
+#endif /* __EXAMPLEAPP_H */
diff --git a/examples/application2/exampleappwin.c b/examples/application2/exampleappwin.c
new file mode 100644
index 0000000000..7adf218120
--- /dev/null
+++ b/examples/application2/exampleappwin.c
@@ -0,0 +1,38 @@
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include
+
+struct ExampleAppWindow {
+ GtkApplicationWindow parent;
+};
+
+struct ExampleAppWindowClass {
+ GtkApplicationWindowClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW);
+
+static void
+example_app_window_init (ExampleAppWindow *win)
+{
+ gtk_widget_init_template (GTK_WIDGET (win));
+}
+
+static void
+example_app_window_class_init (ExampleAppWindowClass *class)
+{
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/window.ui");
+}
+
+ExampleAppWindow *
+example_app_window_new (ExampleApp *app)
+{
+ return g_object_new (EXAMPLE_APP_WINDOW_TYPE, "application", app, NULL);
+}
+
+void
+example_app_window_open (ExampleAppWindow *win,
+ GFile *file)
+{
+}
diff --git a/examples/application2/exampleappwin.h b/examples/application2/exampleappwin.h
new file mode 100644
index 0000000000..11ff3c27a7
--- /dev/null
+++ b/examples/application2/exampleappwin.h
@@ -0,0 +1,22 @@
+#ifndef __EXAMPLEAPPWIN_H
+#define __EXAMPLEAPPWIN_H
+
+#include
+#include "exampleapp.h"
+
+
+#define EXAMPLE_APP_WINDOW_TYPE (example_app_window_get_type ())
+#define EXAMPLE_APP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_WINDOW_TYPE, ExampleAppWindow))
+
+
+typedef struct ExampleAppWindow ExampleAppWindow;
+typedef struct ExampleAppWindowClass ExampleAppWindowClass;
+
+
+GType example_app_window_get_type (void);
+ExampleAppWindow *example_app_window_new (ExampleApp *app);
+void example_app_window_open (ExampleAppWindow *win,
+ GFile *file);
+
+
+#endif /* __EXAMPLEAPPWIN_H */
diff --git a/examples/application2/main.c b/examples/application2/main.c
new file mode 100644
index 0000000000..7c24d8b04e
--- /dev/null
+++ b/examples/application2/main.c
@@ -0,0 +1,8 @@
+#include
+#include
+
+int
+main (int argc, char *argv[])
+{
+ return g_application_run (G_APPLICATION (example_app_new ()), argc, argv);
+}
diff --git a/examples/application2/window.ui b/examples/application2/window.ui
new file mode 100644
index 0000000000..d90c3f618c
--- /dev/null
+++ b/examples/application2/window.ui
@@ -0,0 +1,31 @@
+
+
+
+
+ Example Application
+ 600
+ 400
+
+
+
+
+
diff --git a/examples/application3/Makefile.am b/examples/application3/Makefile.am
new file mode 100644
index 0000000000..91e3c1903c
--- /dev/null
+++ b/examples/application3/Makefile.am
@@ -0,0 +1,30 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
+ -I$(top_builddir)/gdk \
+ $(GTK_DEBUG_FLAGS) \
+ $(GTK_DEP_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la \
+ $(GTK_DEP_LIBS)
+
+
+noinst_PROGRAMS = exampleapp
+
+exampleapp_SOURCES = \
+ main.c \
+ exampleapp.c exampleapp.h \
+ exampleappwin.c exampleappwin.h \
+ resources.c
+
+BUILT_SOURCES = resources.c
+
+resources.c: exampleapp.gresource.xml window.ui
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
+ --target=$@ --sourcedir=$(srcdir) --generate-source
+
+EXTRA_DIST = \
+ window.ui \
+ exampleapp.gresource.xml
diff --git a/examples/application3/exampleapp.c b/examples/application3/exampleapp.c
new file mode 100644
index 0000000000..bdd6a778e0
--- /dev/null
+++ b/examples/application3/exampleapp.c
@@ -0,0 +1,66 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+
+struct ExampleApp {
+ GtkApplication parent;
+};
+
+struct ExampleAppClass {
+ GtkApplicationClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleApp, example_app, GTK_TYPE_APPLICATION);
+
+static void
+example_app_init (ExampleApp *app)
+{
+}
+
+static void
+example_app_activate (GApplication *app)
+{
+ ExampleAppWindow *win;
+
+ win = example_app_window_new (EXAMPLE_APP (app));
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_open (GApplication *app,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GList *windows;
+ ExampleAppWindow *win;
+ int i;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows)
+ win = EXAMPLE_APP_WINDOW (windows->data);
+ else
+ win = example_app_window_new (EXAMPLE_APP (app));
+
+ for (i = 0; i < n_files; i++)
+ example_app_window_open (win, files[i]);
+
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_class_init (ExampleAppClass *class)
+{
+ G_APPLICATION_CLASS (class)->activate = example_app_activate;
+ G_APPLICATION_CLASS (class)->open = example_app_open;
+}
+
+ExampleApp *
+example_app_new (void)
+{
+ return g_object_new (EXAMPLE_APP_TYPE,
+ "application-id", "org.gtk.exampleapp",
+ "flags", G_APPLICATION_HANDLES_OPEN,
+ NULL);
+}
diff --git a/examples/application3/exampleapp.gresource.xml b/examples/application3/exampleapp.gresource.xml
new file mode 100644
index 0000000000..175264c7c0
--- /dev/null
+++ b/examples/application3/exampleapp.gresource.xml
@@ -0,0 +1,6 @@
+
+
+
+ window.ui
+
+
diff --git a/examples/application3/exampleapp.h b/examples/application3/exampleapp.h
new file mode 100644
index 0000000000..8b51c598ea
--- /dev/null
+++ b/examples/application3/exampleapp.h
@@ -0,0 +1,19 @@
+#ifndef __EXAMPLEAPP_H
+#define __EXAMPLEAPP_H
+
+#include
+
+
+#define EXAMPLE_APP_TYPE (example_app_get_type ())
+#define EXAMPLE_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_TYPE, ExampleApp))
+
+
+typedef struct ExampleApp ExampleApp;
+typedef struct ExampleAppClass ExampleAppClass;
+
+
+GType example_app_get_type (void);
+ExampleApp *example_app_new (void);
+
+
+#endif /* __EXAMPLEAPP_H */
diff --git a/examples/application3/exampleappwin.c b/examples/application3/exampleappwin.c
new file mode 100644
index 0000000000..52306e1fd7
--- /dev/null
+++ b/examples/application3/exampleappwin.c
@@ -0,0 +1,73 @@
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include
+
+struct ExampleAppWindow {
+ GtkApplicationWindow parent;
+};
+
+struct ExampleAppWindowClass {
+ GtkApplicationWindowClass parent_class;
+};
+
+typedef struct ExampleAppWindowPrivate ExampleAppWindowPrivate;
+
+struct ExampleAppWindowPrivate {
+ GtkWidget *stack;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW);
+
+static void
+example_app_window_init (ExampleAppWindow *win)
+{
+ gtk_widget_init_template (GTK_WIDGET (win));
+}
+
+static void
+example_app_window_class_init (ExampleAppWindowClass *class)
+{
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/window.ui");
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, stack);
+}
+
+ExampleAppWindow *
+example_app_window_new (ExampleApp *app)
+{
+ return g_object_new (EXAMPLE_APP_WINDOW_TYPE, "application", app, NULL);
+}
+
+void
+example_app_window_open (ExampleAppWindow *win,
+ GFile *file)
+{
+ ExampleAppWindowPrivate *priv = example_app_window_get_instance_private (win);
+ gchar *basename;
+ GtkWidget *scrolled, *view;
+ gchar *contents;
+ gsize length;
+
+ basename = g_file_get_basename (file);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolled);
+ gtk_widget_set_hexpand (scrolled, TRUE);
+ gtk_widget_set_vexpand (scrolled, TRUE);
+ view = gtk_text_view_new ();
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE);
+ gtk_widget_show (view);
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+ gtk_stack_add_titled (GTK_STACK (priv->stack), scrolled, basename, basename);
+
+ if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL)) {
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+ gtk_text_buffer_set_text (buffer, contents, length);
+ g_free (contents);
+ }
+
+ g_free (basename);
+}
diff --git a/examples/application3/exampleappwin.h b/examples/application3/exampleappwin.h
new file mode 100644
index 0000000000..11ff3c27a7
--- /dev/null
+++ b/examples/application3/exampleappwin.h
@@ -0,0 +1,22 @@
+#ifndef __EXAMPLEAPPWIN_H
+#define __EXAMPLEAPPWIN_H
+
+#include
+#include "exampleapp.h"
+
+
+#define EXAMPLE_APP_WINDOW_TYPE (example_app_window_get_type ())
+#define EXAMPLE_APP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_WINDOW_TYPE, ExampleAppWindow))
+
+
+typedef struct ExampleAppWindow ExampleAppWindow;
+typedef struct ExampleAppWindowClass ExampleAppWindowClass;
+
+
+GType example_app_window_get_type (void);
+ExampleAppWindow *example_app_window_new (ExampleApp *app);
+void example_app_window_open (ExampleAppWindow *win,
+ GFile *file);
+
+
+#endif /* __EXAMPLEAPPWIN_H */
diff --git a/examples/application3/main.c b/examples/application3/main.c
new file mode 100644
index 0000000000..7c24d8b04e
--- /dev/null
+++ b/examples/application3/main.c
@@ -0,0 +1,8 @@
+#include
+#include
+
+int
+main (int argc, char *argv[])
+{
+ return g_application_run (G_APPLICATION (example_app_new ()), argc, argv);
+}
diff --git a/examples/application3/window.ui b/examples/application3/window.ui
new file mode 100644
index 0000000000..d90c3f618c
--- /dev/null
+++ b/examples/application3/window.ui
@@ -0,0 +1,31 @@
+
+
+
+
+ Example Application
+ 600
+ 400
+
+
+ True
+ vertical
+
+
+
+
+
+ True
+
+
+
+
+
+
diff --git a/examples/application4/Makefile.am b/examples/application4/Makefile.am
new file mode 100644
index 0000000000..d20ca0ed02
--- /dev/null
+++ b/examples/application4/Makefile.am
@@ -0,0 +1,31 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
+ -I$(top_builddir)/gdk \
+ $(GTK_DEBUG_FLAGS) \
+ $(GTK_DEP_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la \
+ $(GTK_DEP_LIBS)
+
+
+noinst_PROGRAMS = exampleapp
+
+exampleapp_SOURCES = \
+ main.c \
+ exampleapp.c exampleapp.h \
+ exampleappwin.c exampleappwin.h \
+ resources.c
+
+BUILT_SOURCES = resources.c
+
+resources.c: exampleapp.gresource.xml window.ui app-menu.ui
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
+ --target=$@ --sourcedir=$(srcdir) --generate-source
+
+EXTRA_DIST = \
+ window.ui \
+ app-menu.ui \
+ exampleapp.gresource.xml
diff --git a/examples/application4/app-menu.ui b/examples/application4/app-menu.ui
new file mode 100644
index 0000000000..b0eddb65e5
--- /dev/null
+++ b/examples/application4/app-menu.ui
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/examples/application4/exampleapp.c b/examples/application4/exampleapp.c
new file mode 100644
index 0000000000..77ced6b501
--- /dev/null
+++ b/examples/application4/exampleapp.c
@@ -0,0 +1,105 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+
+struct ExampleApp {
+ GtkApplication parent;
+};
+
+struct ExampleAppClass {
+ GtkApplicationClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleApp, example_app, GTK_TYPE_APPLICATION);
+
+static void
+example_app_init (ExampleApp *app)
+{
+}
+
+static void
+preferences_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry app_entries[] = {
+ { "preferences", preferences_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+static void
+example_app_startup (GApplication *app)
+{
+ GtkBuilder *builder;
+ GMenuModel *app_menu;
+
+ G_APPLICATION_CLASS (example_app_parent_class)->startup (app);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ app_entries, G_N_ELEMENTS (app_entries),
+ app);
+
+ builder = gtk_builder_new_from_resource ("/org/gtk/exampleapp/app-menu.ui");
+ app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "appmenu"));
+ gtk_application_set_app_menu (GTK_APPLICATION (app), app_menu);
+ g_object_unref (builder);
+}
+
+static void
+example_app_activate (GApplication *app)
+{
+ ExampleAppWindow *win;
+
+ win = example_app_window_new (EXAMPLE_APP (app));
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_open (GApplication *app,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GList *windows;
+ ExampleAppWindow *win;
+ int i;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows)
+ win = EXAMPLE_APP_WINDOW (windows->data);
+ else
+ win = example_app_window_new (EXAMPLE_APP (app));
+
+ for (i = 0; i < n_files; i++)
+ example_app_window_open (win, files[i]);
+
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_class_init (ExampleAppClass *class)
+{
+ G_APPLICATION_CLASS (class)->startup = example_app_startup;
+ G_APPLICATION_CLASS (class)->activate = example_app_activate;
+ G_APPLICATION_CLASS (class)->open = example_app_open;
+}
+
+ExampleApp *
+example_app_new (void)
+{
+ return g_object_new (EXAMPLE_APP_TYPE,
+ "application-id", "org.gtk.exampleapp",
+ "flags", G_APPLICATION_HANDLES_OPEN,
+ NULL);
+}
diff --git a/examples/application4/exampleapp.gresource.xml b/examples/application4/exampleapp.gresource.xml
new file mode 100644
index 0000000000..1c9b11821f
--- /dev/null
+++ b/examples/application4/exampleapp.gresource.xml
@@ -0,0 +1,7 @@
+
+
+
+ window.ui
+ app-menu.ui
+
+
diff --git a/examples/application4/exampleapp.h b/examples/application4/exampleapp.h
new file mode 100644
index 0000000000..8b51c598ea
--- /dev/null
+++ b/examples/application4/exampleapp.h
@@ -0,0 +1,19 @@
+#ifndef __EXAMPLEAPP_H
+#define __EXAMPLEAPP_H
+
+#include
+
+
+#define EXAMPLE_APP_TYPE (example_app_get_type ())
+#define EXAMPLE_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_TYPE, ExampleApp))
+
+
+typedef struct ExampleApp ExampleApp;
+typedef struct ExampleAppClass ExampleAppClass;
+
+
+GType example_app_get_type (void);
+ExampleApp *example_app_new (void);
+
+
+#endif /* __EXAMPLEAPP_H */
diff --git a/examples/application4/exampleappwin.c b/examples/application4/exampleappwin.c
new file mode 100644
index 0000000000..52306e1fd7
--- /dev/null
+++ b/examples/application4/exampleappwin.c
@@ -0,0 +1,73 @@
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include
+
+struct ExampleAppWindow {
+ GtkApplicationWindow parent;
+};
+
+struct ExampleAppWindowClass {
+ GtkApplicationWindowClass parent_class;
+};
+
+typedef struct ExampleAppWindowPrivate ExampleAppWindowPrivate;
+
+struct ExampleAppWindowPrivate {
+ GtkWidget *stack;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW);
+
+static void
+example_app_window_init (ExampleAppWindow *win)
+{
+ gtk_widget_init_template (GTK_WIDGET (win));
+}
+
+static void
+example_app_window_class_init (ExampleAppWindowClass *class)
+{
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/window.ui");
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, stack);
+}
+
+ExampleAppWindow *
+example_app_window_new (ExampleApp *app)
+{
+ return g_object_new (EXAMPLE_APP_WINDOW_TYPE, "application", app, NULL);
+}
+
+void
+example_app_window_open (ExampleAppWindow *win,
+ GFile *file)
+{
+ ExampleAppWindowPrivate *priv = example_app_window_get_instance_private (win);
+ gchar *basename;
+ GtkWidget *scrolled, *view;
+ gchar *contents;
+ gsize length;
+
+ basename = g_file_get_basename (file);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolled);
+ gtk_widget_set_hexpand (scrolled, TRUE);
+ gtk_widget_set_vexpand (scrolled, TRUE);
+ view = gtk_text_view_new ();
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE);
+ gtk_widget_show (view);
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+ gtk_stack_add_titled (GTK_STACK (priv->stack), scrolled, basename, basename);
+
+ if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL)) {
+ GtkTextBuffer *buffer;
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+ gtk_text_buffer_set_text (buffer, contents, length);
+ g_free (contents);
+ }
+
+ g_free (basename);
+}
diff --git a/examples/application4/exampleappwin.h b/examples/application4/exampleappwin.h
new file mode 100644
index 0000000000..11ff3c27a7
--- /dev/null
+++ b/examples/application4/exampleappwin.h
@@ -0,0 +1,22 @@
+#ifndef __EXAMPLEAPPWIN_H
+#define __EXAMPLEAPPWIN_H
+
+#include
+#include "exampleapp.h"
+
+
+#define EXAMPLE_APP_WINDOW_TYPE (example_app_window_get_type ())
+#define EXAMPLE_APP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_WINDOW_TYPE, ExampleAppWindow))
+
+
+typedef struct ExampleAppWindow ExampleAppWindow;
+typedef struct ExampleAppWindowClass ExampleAppWindowClass;
+
+
+GType example_app_window_get_type (void);
+ExampleAppWindow *example_app_window_new (ExampleApp *app);
+void example_app_window_open (ExampleAppWindow *win,
+ GFile *file);
+
+
+#endif /* __EXAMPLEAPPWIN_H */
diff --git a/examples/application4/main.c b/examples/application4/main.c
new file mode 100644
index 0000000000..7c24d8b04e
--- /dev/null
+++ b/examples/application4/main.c
@@ -0,0 +1,8 @@
+#include
+#include
+
+int
+main (int argc, char *argv[])
+{
+ return g_application_run (G_APPLICATION (example_app_new ()), argc, argv);
+}
diff --git a/examples/application4/window.ui b/examples/application4/window.ui
new file mode 100644
index 0000000000..d90c3f618c
--- /dev/null
+++ b/examples/application4/window.ui
@@ -0,0 +1,31 @@
+
+
+
+
+ Example Application
+ 600
+ 400
+
+
+ True
+ vertical
+
+
+
+
+
+ True
+
+
+
+
+
+
diff --git a/examples/application5/Makefile.am b/examples/application5/Makefile.am
new file mode 100644
index 0000000000..83c65e729b
--- /dev/null
+++ b/examples/application5/Makefile.am
@@ -0,0 +1,45 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
+ -I$(top_builddir)/gdk \
+ $(GTK_DEBUG_FLAGS) \
+ $(GTK_DEP_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la \
+ $(GTK_DEP_LIBS)
+
+
+noinst_PROGRAMS = exampleapp
+
+exampleapp_SOURCES = \
+ main.c \
+ exampleapp.c exampleapp.h \
+ exampleappwin.c exampleappwin.h \
+ resources.c
+
+BUILT_SOURCES = \
+ resources.c \
+ gschemas.compiled
+
+resources.c: exampleapp.gresource.xml window.ui app-menu.ui
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
+ --target=$@ --sourcedir=$(srcdir) --generate-source
+
+gsettings_SCHEMAS = \
+ org.gtk.exampleapp.gschema.xml
+
+@GSETTINGS_RULES@
+
+gschemas.compiled: org.gtk.exampleapp.gschema.xml
+ $(GLIB_COMPILE_SCHEMAS) .
+
+EXTRA_DIST = \
+ window.ui \
+ app-menu.ui \
+ exampleapp.gresource.xml \
+ org.gtk.exampleapp.gschema.xml
+
+CLEANFILES = \
+ gschemas.compiled
diff --git a/examples/application5/app-menu.ui b/examples/application5/app-menu.ui
new file mode 100644
index 0000000000..b0eddb65e5
--- /dev/null
+++ b/examples/application5/app-menu.ui
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/examples/application5/exampleapp.c b/examples/application5/exampleapp.c
new file mode 100644
index 0000000000..77ced6b501
--- /dev/null
+++ b/examples/application5/exampleapp.c
@@ -0,0 +1,105 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+
+struct ExampleApp {
+ GtkApplication parent;
+};
+
+struct ExampleAppClass {
+ GtkApplicationClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleApp, example_app, GTK_TYPE_APPLICATION);
+
+static void
+example_app_init (ExampleApp *app)
+{
+}
+
+static void
+preferences_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry app_entries[] = {
+ { "preferences", preferences_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+static void
+example_app_startup (GApplication *app)
+{
+ GtkBuilder *builder;
+ GMenuModel *app_menu;
+
+ G_APPLICATION_CLASS (example_app_parent_class)->startup (app);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ app_entries, G_N_ELEMENTS (app_entries),
+ app);
+
+ builder = gtk_builder_new_from_resource ("/org/gtk/exampleapp/app-menu.ui");
+ app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "appmenu"));
+ gtk_application_set_app_menu (GTK_APPLICATION (app), app_menu);
+ g_object_unref (builder);
+}
+
+static void
+example_app_activate (GApplication *app)
+{
+ ExampleAppWindow *win;
+
+ win = example_app_window_new (EXAMPLE_APP (app));
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_open (GApplication *app,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GList *windows;
+ ExampleAppWindow *win;
+ int i;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows)
+ win = EXAMPLE_APP_WINDOW (windows->data);
+ else
+ win = example_app_window_new (EXAMPLE_APP (app));
+
+ for (i = 0; i < n_files; i++)
+ example_app_window_open (win, files[i]);
+
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_class_init (ExampleAppClass *class)
+{
+ G_APPLICATION_CLASS (class)->startup = example_app_startup;
+ G_APPLICATION_CLASS (class)->activate = example_app_activate;
+ G_APPLICATION_CLASS (class)->open = example_app_open;
+}
+
+ExampleApp *
+example_app_new (void)
+{
+ return g_object_new (EXAMPLE_APP_TYPE,
+ "application-id", "org.gtk.exampleapp",
+ "flags", G_APPLICATION_HANDLES_OPEN,
+ NULL);
+}
diff --git a/examples/application5/exampleapp.gresource.xml b/examples/application5/exampleapp.gresource.xml
new file mode 100644
index 0000000000..1c9b11821f
--- /dev/null
+++ b/examples/application5/exampleapp.gresource.xml
@@ -0,0 +1,7 @@
+
+
+
+ window.ui
+ app-menu.ui
+
+
diff --git a/examples/application5/exampleapp.h b/examples/application5/exampleapp.h
new file mode 100644
index 0000000000..8b51c598ea
--- /dev/null
+++ b/examples/application5/exampleapp.h
@@ -0,0 +1,19 @@
+#ifndef __EXAMPLEAPP_H
+#define __EXAMPLEAPP_H
+
+#include
+
+
+#define EXAMPLE_APP_TYPE (example_app_get_type ())
+#define EXAMPLE_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_TYPE, ExampleApp))
+
+
+typedef struct ExampleApp ExampleApp;
+typedef struct ExampleAppClass ExampleAppClass;
+
+
+GType example_app_get_type (void);
+ExampleApp *example_app_new (void);
+
+
+#endif /* __EXAMPLEAPP_H */
diff --git a/examples/application5/exampleappwin.c b/examples/application5/exampleappwin.c
new file mode 100644
index 0000000000..26790f0524
--- /dev/null
+++ b/examples/application5/exampleappwin.c
@@ -0,0 +1,108 @@
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include
+
+struct ExampleAppWindow {
+ GtkApplicationWindow parent;
+};
+
+struct ExampleAppWindowClass {
+ GtkApplicationWindowClass parent_class;
+};
+
+typedef struct ExampleAppWindowPrivate ExampleAppWindowPrivate;
+
+struct ExampleAppWindowPrivate {
+ GSettings *settings;
+ GtkWidget *stack;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW);
+
+static void
+example_app_window_init (ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+
+ priv = example_app_window_get_instance_private (win);
+ gtk_widget_init_template (GTK_WIDGET (win));
+ priv->settings = g_settings_new ("org.gtk.exampleapp");
+
+ g_settings_bind (priv->settings, "transition",
+ priv->stack, "transition-type",
+ G_SETTINGS_BIND_DEFAULT);
+}
+
+static void
+example_app_window_dispose (GObject *object)
+{
+ ExampleAppWindow *win;
+ ExampleAppWindowPrivate *priv;
+
+ win = EXAMPLE_APP_WINDOW (object);
+ priv = example_app_window_get_instance_private (win);
+
+ g_clear_object (&priv->settings);
+
+ G_OBJECT_CLASS (example_app_window_parent_class)->dispose (object);
+}
+
+static void
+example_app_window_class_init (ExampleAppWindowClass *class)
+{
+ G_OBJECT_CLASS (class)->dispose = example_app_window_dispose;
+
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/window.ui");
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, stack);
+}
+
+ExampleAppWindow *
+example_app_window_new (ExampleApp *app)
+{
+ return g_object_new (EXAMPLE_APP_WINDOW_TYPE, "application", app, NULL);
+}
+
+void
+example_app_window_open (ExampleAppWindow *win,
+ GFile *file)
+{
+ ExampleAppWindowPrivate *priv;
+ gchar *basename;
+ GtkWidget *scrolled, *view;
+ gchar *contents;
+ gsize length;
+ GtkTextBuffer *buffer;
+ GtkTextTag *tag;
+ GtkTextIter start_iter, end_iter;
+
+ priv = example_app_window_get_instance_private (win);
+ basename = g_file_get_basename (file);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolled);
+ gtk_widget_set_hexpand (scrolled, TRUE);
+ gtk_widget_set_vexpand (scrolled, TRUE);
+ view = gtk_text_view_new ();
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE);
+ gtk_widget_show (view);
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+ gtk_stack_add_titled (GTK_STACK (priv->stack), scrolled, basename, basename);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL)) {
+ gtk_text_buffer_set_text (buffer, contents, length);
+ g_free (contents);
+ }
+
+ tag = gtk_text_buffer_create_tag (buffer, NULL, NULL);
+ g_settings_bind (priv->settings, "font", tag, "font", G_SETTINGS_BIND_DEFAULT);
+
+ gtk_text_buffer_get_start_iter (buffer, &start_iter);
+ gtk_text_buffer_get_end_iter (buffer, &end_iter);
+ gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter);
+
+ g_free (basename);
+}
diff --git a/examples/application5/exampleappwin.h b/examples/application5/exampleappwin.h
new file mode 100644
index 0000000000..11ff3c27a7
--- /dev/null
+++ b/examples/application5/exampleappwin.h
@@ -0,0 +1,22 @@
+#ifndef __EXAMPLEAPPWIN_H
+#define __EXAMPLEAPPWIN_H
+
+#include
+#include "exampleapp.h"
+
+
+#define EXAMPLE_APP_WINDOW_TYPE (example_app_window_get_type ())
+#define EXAMPLE_APP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_WINDOW_TYPE, ExampleAppWindow))
+
+
+typedef struct ExampleAppWindow ExampleAppWindow;
+typedef struct ExampleAppWindowClass ExampleAppWindowClass;
+
+
+GType example_app_window_get_type (void);
+ExampleAppWindow *example_app_window_new (ExampleApp *app);
+void example_app_window_open (ExampleAppWindow *win,
+ GFile *file);
+
+
+#endif /* __EXAMPLEAPPWIN_H */
diff --git a/examples/application5/main.c b/examples/application5/main.c
new file mode 100644
index 0000000000..7ce327aa0b
--- /dev/null
+++ b/examples/application5/main.c
@@ -0,0 +1,15 @@
+#include
+#include
+
+int
+main (int argc, char *argv[])
+{
+ /* Since this example is running uninstalled,
+ * we have to help it find its schema. This
+ * is *not* necessary in properly installed
+ * application.
+ */
+ g_setenv ("GSETTINGS_SCHEMA_DIR", ".", FALSE);
+
+ return g_application_run (G_APPLICATION (example_app_new ()), argc, argv);
+}
diff --git a/examples/application5/org.gtk.exampleapp.gschema.xml b/examples/application5/org.gtk.exampleapp.gschema.xml
new file mode 100644
index 0000000000..89718c480c
--- /dev/null
+++ b/examples/application5/org.gtk.exampleapp.gschema.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+ 'Monospace 12'
+ Font
+ The font to be used for content.
+
+
+ 'none'
+ Transition
+ The transition to use when switching tabs.
+
+
+
diff --git a/examples/application5/window.ui b/examples/application5/window.ui
new file mode 100644
index 0000000000..d90c3f618c
--- /dev/null
+++ b/examples/application5/window.ui
@@ -0,0 +1,31 @@
+
+
+
+
+ Example Application
+ 600
+ 400
+
+
+ True
+ vertical
+
+
+
+
+
+ True
+
+
+
+
+
+
diff --git a/examples/application6/Makefile.am b/examples/application6/Makefile.am
new file mode 100644
index 0000000000..b4583fe2d2
--- /dev/null
+++ b/examples/application6/Makefile.am
@@ -0,0 +1,47 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
+ -I$(top_builddir)/gdk \
+ $(GTK_DEBUG_FLAGS) \
+ $(GTK_DEP_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la \
+ $(GTK_DEP_LIBS)
+
+
+noinst_PROGRAMS = exampleapp
+
+exampleapp_SOURCES = \
+ main.c \
+ exampleapp.c exampleapp.h \
+ exampleappwin.c exampleappwin.h \
+ exampleappprefs.c exampleappprefs.h \
+ resources.c
+
+BUILT_SOURCES = \
+ resources.c \
+ gschemas.compiled
+
+resources.c: exampleapp.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/exampleapp.gresource.xml)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
+ --target=$@ --sourcedir=$(srcdir) --generate-source
+
+gsettings_SCHEMAS = \
+ org.gtk.exampleapp.gschema.xml
+
+@GSETTINGS_RULES@
+
+gschemas.compiled: org.gtk.exampleapp.gschema.xml
+ $(GLIB_COMPILE_SCHEMAS) .
+
+EXTRA_DIST = \
+ window.ui \
+ app-menu.ui \
+ prefs.ui \
+ exampleapp.gresource.xml \
+ org.gtk.exampleapp.gschema.xml
+
+CLEANFILES = \
+ gschemas.compiled
diff --git a/examples/application6/app-menu.ui b/examples/application6/app-menu.ui
new file mode 100644
index 0000000000..b0eddb65e5
--- /dev/null
+++ b/examples/application6/app-menu.ui
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/examples/application6/exampleapp.c b/examples/application6/exampleapp.c
new file mode 100644
index 0000000000..633216c692
--- /dev/null
+++ b/examples/application6/exampleapp.c
@@ -0,0 +1,112 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include "exampleappprefs.h"
+
+struct ExampleApp {
+ GtkApplication parent;
+};
+
+struct ExampleAppClass {
+ GtkApplicationClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleApp, example_app, GTK_TYPE_APPLICATION);
+
+static void
+example_app_init (ExampleApp *app)
+{
+}
+
+static void
+preferences_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ ExampleAppPrefs *prefs;
+ GtkWindow *win;
+
+ win = gtk_application_get_active_window (GTK_APPLICATION (app));
+ prefs = example_app_prefs_new (EXAMPLE_APP_WINDOW (win));
+ gtk_window_present (GTK_WINDOW (prefs));
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry app_entries[] = {
+ { "preferences", preferences_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+static void
+example_app_startup (GApplication *app)
+{
+ GtkBuilder *builder;
+ GMenuModel *app_menu;
+
+ G_APPLICATION_CLASS (example_app_parent_class)->startup (app);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ app_entries, G_N_ELEMENTS (app_entries),
+ app);
+
+ builder = gtk_builder_new_from_resource ("/org/gtk/exampleapp/app-menu.ui");
+ app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "appmenu"));
+ gtk_application_set_app_menu (GTK_APPLICATION (app), app_menu);
+ g_object_unref (builder);
+}
+
+static void
+example_app_activate (GApplication *app)
+{
+ ExampleAppWindow *win;
+
+ win = example_app_window_new (EXAMPLE_APP (app));
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_open (GApplication *app,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GList *windows;
+ ExampleAppWindow *win;
+ int i;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows)
+ win = EXAMPLE_APP_WINDOW (windows->data);
+ else
+ win = example_app_window_new (EXAMPLE_APP (app));
+
+ for (i = 0; i < n_files; i++)
+ example_app_window_open (win, files[i]);
+
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_class_init (ExampleAppClass *class)
+{
+ G_APPLICATION_CLASS (class)->startup = example_app_startup;
+ G_APPLICATION_CLASS (class)->activate = example_app_activate;
+ G_APPLICATION_CLASS (class)->open = example_app_open;
+}
+
+ExampleApp *
+example_app_new (void)
+{
+ return g_object_new (EXAMPLE_APP_TYPE,
+ "application-id", "org.gtk.exampleapp",
+ "flags", G_APPLICATION_HANDLES_OPEN,
+ NULL);
+}
diff --git a/examples/application6/exampleapp.gresource.xml b/examples/application6/exampleapp.gresource.xml
new file mode 100644
index 0000000000..797688586b
--- /dev/null
+++ b/examples/application6/exampleapp.gresource.xml
@@ -0,0 +1,8 @@
+
+
+
+ window.ui
+ app-menu.ui
+ prefs.ui
+
+
diff --git a/examples/application6/exampleapp.h b/examples/application6/exampleapp.h
new file mode 100644
index 0000000000..8b51c598ea
--- /dev/null
+++ b/examples/application6/exampleapp.h
@@ -0,0 +1,19 @@
+#ifndef __EXAMPLEAPP_H
+#define __EXAMPLEAPP_H
+
+#include
+
+
+#define EXAMPLE_APP_TYPE (example_app_get_type ())
+#define EXAMPLE_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_TYPE, ExampleApp))
+
+
+typedef struct ExampleApp ExampleApp;
+typedef struct ExampleAppClass ExampleAppClass;
+
+
+GType example_app_get_type (void);
+ExampleApp *example_app_new (void);
+
+
+#endif /* __EXAMPLEAPP_H */
diff --git a/examples/application6/exampleappprefs.c b/examples/application6/exampleappprefs.c
new file mode 100644
index 0000000000..75f2ccb164
--- /dev/null
+++ b/examples/application6/exampleappprefs.c
@@ -0,0 +1,71 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include "exampleappprefs.h"
+
+struct ExampleAppPrefs {
+ GtkDialog parent;
+};
+
+struct ExampleAppPrefsClass {
+ GtkDialogClass parent_class;
+};
+
+typedef struct ExampleAppPrefsPrivate ExampleAppPrefsPrivate;
+struct ExampleAppPrefsPrivate {
+ GSettings *settings;
+ GtkWidget *font;
+ GtkWidget *transition;
+ GtkWidget *close;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppPrefs, example_app_prefs, GTK_TYPE_DIALOG)
+
+static void
+example_app_prefs_init (ExampleAppPrefs *prefs)
+{
+ ExampleAppPrefsPrivate *priv;
+
+ priv = example_app_prefs_get_instance_private (prefs);
+ gtk_widget_init_template (GTK_WIDGET (prefs));
+ priv->settings = g_settings_new ("org.gtk.exampleapp");
+
+ g_settings_bind (priv->settings, "font",
+ priv->font, "font",
+ G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (priv->settings, "transition",
+ priv->transition, "active-id",
+ G_SETTINGS_BIND_DEFAULT);
+ g_signal_connect_swapped (priv->close, "clicked",
+ G_CALLBACK (gtk_widget_destroy), prefs);
+}
+
+static void
+example_app_prefs_dispose (GObject *object)
+{
+ ExampleAppPrefsPrivate *priv;
+
+ priv = example_app_prefs_get_instance_private (EXAMPLE_APP_PREFS (object));
+ g_clear_object (&priv->settings);
+
+ G_OBJECT_CLASS (example_app_prefs_parent_class)->dispose (object);
+}
+
+static void
+example_app_prefs_class_init (ExampleAppPrefsClass *class)
+{
+ G_OBJECT_CLASS (class)->dispose = example_app_prefs_dispose;
+
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/prefs.ui");
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppPrefsPrivate, font);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppPrefsPrivate, transition);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppPrefsPrivate, close);
+}
+
+ExampleAppPrefs *
+example_app_prefs_new (ExampleAppWindow *win)
+{
+ return g_object_new (EXAMPLE_APP_PREFS_TYPE, "transient-for", win, NULL);
+}
diff --git a/examples/application6/exampleappprefs.h b/examples/application6/exampleappprefs.h
new file mode 100644
index 0000000000..fe32a67c1a
--- /dev/null
+++ b/examples/application6/exampleappprefs.h
@@ -0,0 +1,20 @@
+#ifndef __EXAMPLEAPPPREFS_H
+#define __EXAMPLEAPPPREFS_H
+
+#include
+#include "exampleappwin.h"
+
+
+#define EXAMPLE_APP_PREFS_TYPE (example_app_prefs_get_type ())
+#define EXAMPLE_APP_PREFS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_PREFS_TYPE, ExampleAppPrefs))
+
+
+typedef struct ExampleAppPrefs ExampleAppPrefs;
+typedef struct ExampleAppPrefsClass ExampleAppPrefsClass;
+
+
+GType example_app_prefs_get_type (void);
+ExampleAppPrefs *example_app_prefs_new (ExampleAppWindow *win);
+
+
+#endif /* __EXAMPLEAPPPREFS_H */
diff --git a/examples/application6/exampleappwin.c b/examples/application6/exampleappwin.c
new file mode 100644
index 0000000000..26790f0524
--- /dev/null
+++ b/examples/application6/exampleappwin.c
@@ -0,0 +1,108 @@
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include
+
+struct ExampleAppWindow {
+ GtkApplicationWindow parent;
+};
+
+struct ExampleAppWindowClass {
+ GtkApplicationWindowClass parent_class;
+};
+
+typedef struct ExampleAppWindowPrivate ExampleAppWindowPrivate;
+
+struct ExampleAppWindowPrivate {
+ GSettings *settings;
+ GtkWidget *stack;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW);
+
+static void
+example_app_window_init (ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+
+ priv = example_app_window_get_instance_private (win);
+ gtk_widget_init_template (GTK_WIDGET (win));
+ priv->settings = g_settings_new ("org.gtk.exampleapp");
+
+ g_settings_bind (priv->settings, "transition",
+ priv->stack, "transition-type",
+ G_SETTINGS_BIND_DEFAULT);
+}
+
+static void
+example_app_window_dispose (GObject *object)
+{
+ ExampleAppWindow *win;
+ ExampleAppWindowPrivate *priv;
+
+ win = EXAMPLE_APP_WINDOW (object);
+ priv = example_app_window_get_instance_private (win);
+
+ g_clear_object (&priv->settings);
+
+ G_OBJECT_CLASS (example_app_window_parent_class)->dispose (object);
+}
+
+static void
+example_app_window_class_init (ExampleAppWindowClass *class)
+{
+ G_OBJECT_CLASS (class)->dispose = example_app_window_dispose;
+
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/window.ui");
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, stack);
+}
+
+ExampleAppWindow *
+example_app_window_new (ExampleApp *app)
+{
+ return g_object_new (EXAMPLE_APP_WINDOW_TYPE, "application", app, NULL);
+}
+
+void
+example_app_window_open (ExampleAppWindow *win,
+ GFile *file)
+{
+ ExampleAppWindowPrivate *priv;
+ gchar *basename;
+ GtkWidget *scrolled, *view;
+ gchar *contents;
+ gsize length;
+ GtkTextBuffer *buffer;
+ GtkTextTag *tag;
+ GtkTextIter start_iter, end_iter;
+
+ priv = example_app_window_get_instance_private (win);
+ basename = g_file_get_basename (file);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolled);
+ gtk_widget_set_hexpand (scrolled, TRUE);
+ gtk_widget_set_vexpand (scrolled, TRUE);
+ view = gtk_text_view_new ();
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE);
+ gtk_widget_show (view);
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+ gtk_stack_add_titled (GTK_STACK (priv->stack), scrolled, basename, basename);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL)) {
+ gtk_text_buffer_set_text (buffer, contents, length);
+ g_free (contents);
+ }
+
+ tag = gtk_text_buffer_create_tag (buffer, NULL, NULL);
+ g_settings_bind (priv->settings, "font", tag, "font", G_SETTINGS_BIND_DEFAULT);
+
+ gtk_text_buffer_get_start_iter (buffer, &start_iter);
+ gtk_text_buffer_get_end_iter (buffer, &end_iter);
+ gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter);
+
+ g_free (basename);
+}
diff --git a/examples/application6/exampleappwin.h b/examples/application6/exampleappwin.h
new file mode 100644
index 0000000000..11ff3c27a7
--- /dev/null
+++ b/examples/application6/exampleappwin.h
@@ -0,0 +1,22 @@
+#ifndef __EXAMPLEAPPWIN_H
+#define __EXAMPLEAPPWIN_H
+
+#include
+#include "exampleapp.h"
+
+
+#define EXAMPLE_APP_WINDOW_TYPE (example_app_window_get_type ())
+#define EXAMPLE_APP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_WINDOW_TYPE, ExampleAppWindow))
+
+
+typedef struct ExampleAppWindow ExampleAppWindow;
+typedef struct ExampleAppWindowClass ExampleAppWindowClass;
+
+
+GType example_app_window_get_type (void);
+ExampleAppWindow *example_app_window_new (ExampleApp *app);
+void example_app_window_open (ExampleAppWindow *win,
+ GFile *file);
+
+
+#endif /* __EXAMPLEAPPWIN_H */
diff --git a/examples/application6/main.c b/examples/application6/main.c
new file mode 100644
index 0000000000..7ce327aa0b
--- /dev/null
+++ b/examples/application6/main.c
@@ -0,0 +1,15 @@
+#include
+#include
+
+int
+main (int argc, char *argv[])
+{
+ /* Since this example is running uninstalled,
+ * we have to help it find its schema. This
+ * is *not* necessary in properly installed
+ * application.
+ */
+ g_setenv ("GSETTINGS_SCHEMA_DIR", ".", FALSE);
+
+ return g_application_run (G_APPLICATION (example_app_new ()), argc, argv);
+}
diff --git a/examples/application6/org.gtk.exampleapp.gschema.xml b/examples/application6/org.gtk.exampleapp.gschema.xml
new file mode 100644
index 0000000000..89718c480c
--- /dev/null
+++ b/examples/application6/org.gtk.exampleapp.gschema.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+ 'Monospace 12'
+ Font
+ The font to be used for content.
+
+
+ 'none'
+ Transition
+ The transition to use when switching tabs.
+
+
+
diff --git a/examples/application6/prefs.ui b/examples/application6/prefs.ui
new file mode 100644
index 0000000000..4e846b8e15
--- /dev/null
+++ b/examples/application6/prefs.ui
@@ -0,0 +1,82 @@
+
+
+
+
+ Preferences
+ False
+ True
+
+
+
+
+ True
+ 6
+ 12
+ 6
+
+
+ True
+ _Font:
+ True
+ font
+ 1
+
+
+ 0
+ 0
+
+
+
+
+ True
+
+
+ 1
+ 0
+
+
+
+
+ True
+ _Transition:
+ True
+ transition
+ 1
+
+
+ 0
+ 1
+
+
+
+
+ True
+
+ - None
+ - Fade
+ - Slide
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ True
+
+
+ True
+ _Close
+ True
+
+
+
+
+
+
+
+
diff --git a/examples/application6/window.ui b/examples/application6/window.ui
new file mode 100644
index 0000000000..d90c3f618c
--- /dev/null
+++ b/examples/application6/window.ui
@@ -0,0 +1,31 @@
+
+
+
+
+ Example Application
+ 600
+ 400
+
+
+ True
+ vertical
+
+
+
+
+
+ True
+
+
+
+
+
+
diff --git a/examples/application7/Makefile.am b/examples/application7/Makefile.am
new file mode 100644
index 0000000000..b4583fe2d2
--- /dev/null
+++ b/examples/application7/Makefile.am
@@ -0,0 +1,47 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
+ -I$(top_builddir)/gdk \
+ $(GTK_DEBUG_FLAGS) \
+ $(GTK_DEP_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la \
+ $(GTK_DEP_LIBS)
+
+
+noinst_PROGRAMS = exampleapp
+
+exampleapp_SOURCES = \
+ main.c \
+ exampleapp.c exampleapp.h \
+ exampleappwin.c exampleappwin.h \
+ exampleappprefs.c exampleappprefs.h \
+ resources.c
+
+BUILT_SOURCES = \
+ resources.c \
+ gschemas.compiled
+
+resources.c: exampleapp.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/exampleapp.gresource.xml)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
+ --target=$@ --sourcedir=$(srcdir) --generate-source
+
+gsettings_SCHEMAS = \
+ org.gtk.exampleapp.gschema.xml
+
+@GSETTINGS_RULES@
+
+gschemas.compiled: org.gtk.exampleapp.gschema.xml
+ $(GLIB_COMPILE_SCHEMAS) .
+
+EXTRA_DIST = \
+ window.ui \
+ app-menu.ui \
+ prefs.ui \
+ exampleapp.gresource.xml \
+ org.gtk.exampleapp.gschema.xml
+
+CLEANFILES = \
+ gschemas.compiled
diff --git a/examples/application7/app-menu.ui b/examples/application7/app-menu.ui
new file mode 100644
index 0000000000..b0eddb65e5
--- /dev/null
+++ b/examples/application7/app-menu.ui
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/examples/application7/exampleapp.c b/examples/application7/exampleapp.c
new file mode 100644
index 0000000000..633216c692
--- /dev/null
+++ b/examples/application7/exampleapp.c
@@ -0,0 +1,112 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include "exampleappprefs.h"
+
+struct ExampleApp {
+ GtkApplication parent;
+};
+
+struct ExampleAppClass {
+ GtkApplicationClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleApp, example_app, GTK_TYPE_APPLICATION);
+
+static void
+example_app_init (ExampleApp *app)
+{
+}
+
+static void
+preferences_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ ExampleAppPrefs *prefs;
+ GtkWindow *win;
+
+ win = gtk_application_get_active_window (GTK_APPLICATION (app));
+ prefs = example_app_prefs_new (EXAMPLE_APP_WINDOW (win));
+ gtk_window_present (GTK_WINDOW (prefs));
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry app_entries[] = {
+ { "preferences", preferences_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+static void
+example_app_startup (GApplication *app)
+{
+ GtkBuilder *builder;
+ GMenuModel *app_menu;
+
+ G_APPLICATION_CLASS (example_app_parent_class)->startup (app);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ app_entries, G_N_ELEMENTS (app_entries),
+ app);
+
+ builder = gtk_builder_new_from_resource ("/org/gtk/exampleapp/app-menu.ui");
+ app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "appmenu"));
+ gtk_application_set_app_menu (GTK_APPLICATION (app), app_menu);
+ g_object_unref (builder);
+}
+
+static void
+example_app_activate (GApplication *app)
+{
+ ExampleAppWindow *win;
+
+ win = example_app_window_new (EXAMPLE_APP (app));
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_open (GApplication *app,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GList *windows;
+ ExampleAppWindow *win;
+ int i;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows)
+ win = EXAMPLE_APP_WINDOW (windows->data);
+ else
+ win = example_app_window_new (EXAMPLE_APP (app));
+
+ for (i = 0; i < n_files; i++)
+ example_app_window_open (win, files[i]);
+
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_class_init (ExampleAppClass *class)
+{
+ G_APPLICATION_CLASS (class)->startup = example_app_startup;
+ G_APPLICATION_CLASS (class)->activate = example_app_activate;
+ G_APPLICATION_CLASS (class)->open = example_app_open;
+}
+
+ExampleApp *
+example_app_new (void)
+{
+ return g_object_new (EXAMPLE_APP_TYPE,
+ "application-id", "org.gtk.exampleapp",
+ "flags", G_APPLICATION_HANDLES_OPEN,
+ NULL);
+}
diff --git a/examples/application7/exampleapp.gresource.xml b/examples/application7/exampleapp.gresource.xml
new file mode 100644
index 0000000000..797688586b
--- /dev/null
+++ b/examples/application7/exampleapp.gresource.xml
@@ -0,0 +1,8 @@
+
+
+
+ window.ui
+ app-menu.ui
+ prefs.ui
+
+
diff --git a/examples/application7/exampleapp.h b/examples/application7/exampleapp.h
new file mode 100644
index 0000000000..8b51c598ea
--- /dev/null
+++ b/examples/application7/exampleapp.h
@@ -0,0 +1,19 @@
+#ifndef __EXAMPLEAPP_H
+#define __EXAMPLEAPP_H
+
+#include
+
+
+#define EXAMPLE_APP_TYPE (example_app_get_type ())
+#define EXAMPLE_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_TYPE, ExampleApp))
+
+
+typedef struct ExampleApp ExampleApp;
+typedef struct ExampleAppClass ExampleAppClass;
+
+
+GType example_app_get_type (void);
+ExampleApp *example_app_new (void);
+
+
+#endif /* __EXAMPLEAPP_H */
diff --git a/examples/application7/exampleappprefs.c b/examples/application7/exampleappprefs.c
new file mode 100644
index 0000000000..75f2ccb164
--- /dev/null
+++ b/examples/application7/exampleappprefs.c
@@ -0,0 +1,71 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include "exampleappprefs.h"
+
+struct ExampleAppPrefs {
+ GtkDialog parent;
+};
+
+struct ExampleAppPrefsClass {
+ GtkDialogClass parent_class;
+};
+
+typedef struct ExampleAppPrefsPrivate ExampleAppPrefsPrivate;
+struct ExampleAppPrefsPrivate {
+ GSettings *settings;
+ GtkWidget *font;
+ GtkWidget *transition;
+ GtkWidget *close;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppPrefs, example_app_prefs, GTK_TYPE_DIALOG)
+
+static void
+example_app_prefs_init (ExampleAppPrefs *prefs)
+{
+ ExampleAppPrefsPrivate *priv;
+
+ priv = example_app_prefs_get_instance_private (prefs);
+ gtk_widget_init_template (GTK_WIDGET (prefs));
+ priv->settings = g_settings_new ("org.gtk.exampleapp");
+
+ g_settings_bind (priv->settings, "font",
+ priv->font, "font",
+ G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (priv->settings, "transition",
+ priv->transition, "active-id",
+ G_SETTINGS_BIND_DEFAULT);
+ g_signal_connect_swapped (priv->close, "clicked",
+ G_CALLBACK (gtk_widget_destroy), prefs);
+}
+
+static void
+example_app_prefs_dispose (GObject *object)
+{
+ ExampleAppPrefsPrivate *priv;
+
+ priv = example_app_prefs_get_instance_private (EXAMPLE_APP_PREFS (object));
+ g_clear_object (&priv->settings);
+
+ G_OBJECT_CLASS (example_app_prefs_parent_class)->dispose (object);
+}
+
+static void
+example_app_prefs_class_init (ExampleAppPrefsClass *class)
+{
+ G_OBJECT_CLASS (class)->dispose = example_app_prefs_dispose;
+
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/prefs.ui");
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppPrefsPrivate, font);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppPrefsPrivate, transition);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppPrefsPrivate, close);
+}
+
+ExampleAppPrefs *
+example_app_prefs_new (ExampleAppWindow *win)
+{
+ return g_object_new (EXAMPLE_APP_PREFS_TYPE, "transient-for", win, NULL);
+}
diff --git a/examples/application7/exampleappprefs.h b/examples/application7/exampleappprefs.h
new file mode 100644
index 0000000000..fe32a67c1a
--- /dev/null
+++ b/examples/application7/exampleappprefs.h
@@ -0,0 +1,20 @@
+#ifndef __EXAMPLEAPPPREFS_H
+#define __EXAMPLEAPPPREFS_H
+
+#include
+#include "exampleappwin.h"
+
+
+#define EXAMPLE_APP_PREFS_TYPE (example_app_prefs_get_type ())
+#define EXAMPLE_APP_PREFS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_PREFS_TYPE, ExampleAppPrefs))
+
+
+typedef struct ExampleAppPrefs ExampleAppPrefs;
+typedef struct ExampleAppPrefsClass ExampleAppPrefsClass;
+
+
+GType example_app_prefs_get_type (void);
+ExampleAppPrefs *example_app_prefs_new (ExampleAppWindow *win);
+
+
+#endif /* __EXAMPLEAPPPREFS_H */
diff --git a/examples/application7/exampleappwin.c b/examples/application7/exampleappwin.c
new file mode 100644
index 0000000000..05a8d30078
--- /dev/null
+++ b/examples/application7/exampleappwin.c
@@ -0,0 +1,180 @@
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include
+
+struct ExampleAppWindow {
+ GtkApplicationWindow parent;
+};
+
+struct ExampleAppWindowClass {
+ GtkApplicationWindowClass parent_class;
+};
+
+typedef struct ExampleAppWindowPrivate ExampleAppWindowPrivate;
+
+struct ExampleAppWindowPrivate {
+ GSettings *settings;
+ GtkWidget *stack;
+ GtkWidget *search;
+ GtkWidget *searchbar;
+ GtkWidget *searchentry;
+ gulong text_changed_handler;
+ gulong tab_changed_handler;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW);
+
+static void
+search_text_changed (GtkEntry *entry,
+ ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+ const gchar *text;
+ GtkWidget *tab;
+ GtkWidget *view;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, match_start, match_end;
+
+ text = gtk_entry_get_text (entry);
+
+ if (text[0] == '\0')
+ return;
+
+ priv = example_app_window_get_instance_private (win);
+
+ tab = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
+ view = gtk_bin_get_child (GTK_BIN (tab));
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ /* Very simple-minded search implementation */
+ gtk_text_buffer_get_start_iter (buffer, &start);
+ if (gtk_text_iter_forward_search (&start, text, GTK_TEXT_SEARCH_CASE_INSENSITIVE,
+ &match_start, &match_end, NULL)) {
+ gtk_text_buffer_select_range (buffer, &match_start, &match_end);
+ gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (view), &match_start,
+ 0.0, FALSE, 0.0, 0.0);
+ }
+}
+
+static void
+visible_child_changed (GObject *stack,
+ GParamSpec *pspec,
+ ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+
+ priv = example_app_window_get_instance_private (win);
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (priv->searchbar), FALSE);
+}
+
+static void
+example_app_window_init (ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+
+ priv = example_app_window_get_instance_private (win);
+ gtk_widget_init_template (GTK_WIDGET (win));
+ priv->settings = g_settings_new ("org.gtk.exampleapp");
+
+ g_settings_bind (priv->settings, "transition",
+ priv->stack, "transition-type",
+ G_SETTINGS_BIND_DEFAULT);
+
+ g_object_bind_property (priv->search, "active",
+ priv->searchbar, "search-mode-enabled",
+ G_BINDING_BIDIRECTIONAL);
+
+ priv->text_changed_handler = g_signal_connect (priv->searchentry, "changed",
+ G_CALLBACK (search_text_changed), win);
+ priv->tab_changed_handler = g_signal_connect (priv->stack, "notify::visible-child",
+ G_CALLBACK (visible_child_changed), win);
+}
+
+static void
+example_app_window_dispose (GObject *object)
+{
+ ExampleAppWindow *win;
+ ExampleAppWindowPrivate *priv;
+
+ win = EXAMPLE_APP_WINDOW (object);
+ priv = example_app_window_get_instance_private (win);
+
+ if (priv->text_changed_handler != 0) {
+ g_signal_handler_disconnect (priv->searchentry, priv->text_changed_handler);
+ priv->text_changed_handler = 0;
+ }
+
+ if (priv->tab_changed_handler != 0) {
+ g_signal_handler_disconnect (priv->stack, priv->tab_changed_handler);
+ priv->tab_changed_handler = 0;
+ }
+
+ g_clear_object (&priv->settings);
+
+ G_OBJECT_CLASS (example_app_window_parent_class)->dispose (object);
+}
+
+static void
+example_app_window_class_init (ExampleAppWindowClass *class)
+{
+ G_OBJECT_CLASS (class)->dispose = example_app_window_dispose;
+
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/window.ui");
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, stack);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, search);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, searchbar);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, searchentry);
+}
+
+ExampleAppWindow *
+example_app_window_new (ExampleApp *app)
+{
+ return g_object_new (EXAMPLE_APP_WINDOW_TYPE, "application", app, NULL);
+}
+
+void
+example_app_window_open (ExampleAppWindow *win,
+ GFile *file)
+{
+ ExampleAppWindowPrivate *priv;
+ gchar *basename;
+ GtkWidget *scrolled, *view;
+ gchar *contents;
+ gsize length;
+ GtkTextBuffer *buffer;
+ GtkTextTag *tag;
+ GtkTextIter start_iter, end_iter;
+
+ priv = example_app_window_get_instance_private (win);
+ basename = g_file_get_basename (file);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolled);
+ gtk_widget_set_hexpand (scrolled, TRUE);
+ gtk_widget_set_vexpand (scrolled, TRUE);
+ view = gtk_text_view_new ();
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE);
+ gtk_widget_show (view);
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+ gtk_stack_add_titled (GTK_STACK (priv->stack), scrolled, basename, basename);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL)) {
+ gtk_text_buffer_set_text (buffer, contents, length);
+ g_free (contents);
+ }
+
+ tag = gtk_text_buffer_create_tag (buffer, NULL, NULL);
+ g_settings_bind (priv->settings, "font", tag, "font", G_SETTINGS_BIND_DEFAULT);
+
+ gtk_text_buffer_get_start_iter (buffer, &start_iter);
+ gtk_text_buffer_get_end_iter (buffer, &end_iter);
+ gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter);
+
+ g_free (basename);
+
+ gtk_widget_set_sensitive (priv->search, TRUE);
+}
diff --git a/examples/application7/exampleappwin.h b/examples/application7/exampleappwin.h
new file mode 100644
index 0000000000..11ff3c27a7
--- /dev/null
+++ b/examples/application7/exampleappwin.h
@@ -0,0 +1,22 @@
+#ifndef __EXAMPLEAPPWIN_H
+#define __EXAMPLEAPPWIN_H
+
+#include
+#include "exampleapp.h"
+
+
+#define EXAMPLE_APP_WINDOW_TYPE (example_app_window_get_type ())
+#define EXAMPLE_APP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_WINDOW_TYPE, ExampleAppWindow))
+
+
+typedef struct ExampleAppWindow ExampleAppWindow;
+typedef struct ExampleAppWindowClass ExampleAppWindowClass;
+
+
+GType example_app_window_get_type (void);
+ExampleAppWindow *example_app_window_new (ExampleApp *app);
+void example_app_window_open (ExampleAppWindow *win,
+ GFile *file);
+
+
+#endif /* __EXAMPLEAPPWIN_H */
diff --git a/examples/application7/main.c b/examples/application7/main.c
new file mode 100644
index 0000000000..7ce327aa0b
--- /dev/null
+++ b/examples/application7/main.c
@@ -0,0 +1,15 @@
+#include
+#include
+
+int
+main (int argc, char *argv[])
+{
+ /* Since this example is running uninstalled,
+ * we have to help it find its schema. This
+ * is *not* necessary in properly installed
+ * application.
+ */
+ g_setenv ("GSETTINGS_SCHEMA_DIR", ".", FALSE);
+
+ return g_application_run (G_APPLICATION (example_app_new ()), argc, argv);
+}
diff --git a/examples/application7/org.gtk.exampleapp.gschema.xml b/examples/application7/org.gtk.exampleapp.gschema.xml
new file mode 100644
index 0000000000..89718c480c
--- /dev/null
+++ b/examples/application7/org.gtk.exampleapp.gschema.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+ 'Monospace 12'
+ Font
+ The font to be used for content.
+
+
+ 'none'
+ Transition
+ The transition to use when switching tabs.
+
+
+
diff --git a/examples/application7/prefs.ui b/examples/application7/prefs.ui
new file mode 100644
index 0000000000..4e846b8e15
--- /dev/null
+++ b/examples/application7/prefs.ui
@@ -0,0 +1,82 @@
+
+
+
+
+ Preferences
+ False
+ True
+
+
+
+
+ True
+ 6
+ 12
+ 6
+
+
+ True
+ _Font:
+ True
+ font
+ 1
+
+
+ 0
+ 0
+
+
+
+
+ True
+
+
+ 1
+ 0
+
+
+
+
+ True
+ _Transition:
+ True
+ transition
+ 1
+
+
+ 0
+ 1
+
+
+
+
+ True
+
+ - None
+ - Fade
+ - Slide
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ True
+
+
+ True
+ _Close
+ True
+
+
+
+
+
+
+
+
diff --git a/examples/application7/window.ui b/examples/application7/window.ui
new file mode 100644
index 0000000000..4ddd22e27c
--- /dev/null
+++ b/examples/application7/window.ui
@@ -0,0 +1,57 @@
+
+
+
+
+ Example Application
+ 600
+ 400
+
+
+ True
+ vertical
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+
diff --git a/examples/application8/Makefile.am b/examples/application8/Makefile.am
new file mode 100644
index 0000000000..a7d82f6240
--- /dev/null
+++ b/examples/application8/Makefile.am
@@ -0,0 +1,48 @@
+AM_CPPFLAGS = \
+ -I$(top_srcdir) \
+ -I$(top_srcdir)/gdk \
+ -I$(top_builddir)/gdk \
+ $(GTK_DEBUG_FLAGS) \
+ $(GTK_DEP_CFLAGS)
+
+LDADD = \
+ $(top_builddir)/gtk/libgtk-3.la \
+ $(top_builddir)/gdk/libgdk-3.la \
+ $(GTK_DEP_LIBS)
+
+
+noinst_PROGRAMS = exampleapp
+
+exampleapp_SOURCES = \
+ main.c \
+ exampleapp.c exampleapp.h \
+ exampleappwin.c exampleappwin.h \
+ exampleappprefs.c exampleappprefs.h \
+ resources.c
+
+BUILT_SOURCES = \
+ resources.c \
+ gschemas.compiled
+
+resources.c: exampleapp.gresource.xml $(shell $(GLIB_COMPILE_RESOURCES) --sourcedir=$(srcdir) --generate-dependencies $(srcdir)/exampleapp.gresource.xml)
+ $(AM_V_GEN) $(GLIB_COMPILE_RESOURCES) $(srcdir)/exampleapp.gresource.xml \
+ --target=$@ --sourcedir=$(srcdir) --generate-source
+
+gsettings_SCHEMAS = \
+ org.gtk.exampleapp.gschema.xml
+
+@GSETTINGS_RULES@
+
+gschemas.compiled: org.gtk.exampleapp.gschema.xml
+ $(GLIB_COMPILE_SCHEMAS) .
+
+EXTRA_DIST = \
+ window.ui \
+ app-menu.ui \
+ prefs.ui \
+ gears-menu.ui \
+ exampleapp.gresource.xml \
+ org.gtk.exampleapp.gschema.xml
+
+CLEANFILES = \
+ gschemas.compiled
diff --git a/examples/application8/app-menu.ui b/examples/application8/app-menu.ui
new file mode 100644
index 0000000000..b0eddb65e5
--- /dev/null
+++ b/examples/application8/app-menu.ui
@@ -0,0 +1,19 @@
+
+
+
+
+
diff --git a/examples/application8/exampleapp.c b/examples/application8/exampleapp.c
new file mode 100644
index 0000000000..633216c692
--- /dev/null
+++ b/examples/application8/exampleapp.c
@@ -0,0 +1,112 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include "exampleappprefs.h"
+
+struct ExampleApp {
+ GtkApplication parent;
+};
+
+struct ExampleAppClass {
+ GtkApplicationClass parent_class;
+};
+
+G_DEFINE_TYPE(ExampleApp, example_app, GTK_TYPE_APPLICATION);
+
+static void
+example_app_init (ExampleApp *app)
+{
+}
+
+static void
+preferences_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ ExampleAppPrefs *prefs;
+ GtkWindow *win;
+
+ win = gtk_application_get_active_window (GTK_APPLICATION (app));
+ prefs = example_app_prefs_new (EXAMPLE_APP_WINDOW (win));
+ gtk_window_present (GTK_WINDOW (prefs));
+}
+
+static void
+quit_activated (GSimpleAction *action,
+ GVariant *parameter,
+ gpointer app)
+{
+ g_application_quit (G_APPLICATION (app));
+}
+
+static GActionEntry app_entries[] = {
+ { "preferences", preferences_activated, NULL, NULL, NULL },
+ { "quit", quit_activated, NULL, NULL, NULL }
+};
+
+static void
+example_app_startup (GApplication *app)
+{
+ GtkBuilder *builder;
+ GMenuModel *app_menu;
+
+ G_APPLICATION_CLASS (example_app_parent_class)->startup (app);
+
+ g_action_map_add_action_entries (G_ACTION_MAP (app),
+ app_entries, G_N_ELEMENTS (app_entries),
+ app);
+
+ builder = gtk_builder_new_from_resource ("/org/gtk/exampleapp/app-menu.ui");
+ app_menu = G_MENU_MODEL (gtk_builder_get_object (builder, "appmenu"));
+ gtk_application_set_app_menu (GTK_APPLICATION (app), app_menu);
+ g_object_unref (builder);
+}
+
+static void
+example_app_activate (GApplication *app)
+{
+ ExampleAppWindow *win;
+
+ win = example_app_window_new (EXAMPLE_APP (app));
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_open (GApplication *app,
+ GFile **files,
+ gint n_files,
+ const gchar *hint)
+{
+ GList *windows;
+ ExampleAppWindow *win;
+ int i;
+
+ windows = gtk_application_get_windows (GTK_APPLICATION (app));
+ if (windows)
+ win = EXAMPLE_APP_WINDOW (windows->data);
+ else
+ win = example_app_window_new (EXAMPLE_APP (app));
+
+ for (i = 0; i < n_files; i++)
+ example_app_window_open (win, files[i]);
+
+ gtk_window_present (GTK_WINDOW (win));
+}
+
+static void
+example_app_class_init (ExampleAppClass *class)
+{
+ G_APPLICATION_CLASS (class)->startup = example_app_startup;
+ G_APPLICATION_CLASS (class)->activate = example_app_activate;
+ G_APPLICATION_CLASS (class)->open = example_app_open;
+}
+
+ExampleApp *
+example_app_new (void)
+{
+ return g_object_new (EXAMPLE_APP_TYPE,
+ "application-id", "org.gtk.exampleapp",
+ "flags", G_APPLICATION_HANDLES_OPEN,
+ NULL);
+}
diff --git a/examples/application8/exampleapp.gresource.xml b/examples/application8/exampleapp.gresource.xml
new file mode 100644
index 0000000000..ace59c8bb7
--- /dev/null
+++ b/examples/application8/exampleapp.gresource.xml
@@ -0,0 +1,9 @@
+
+
+
+ window.ui
+ app-menu.ui
+ gears-menu.ui
+ prefs.ui
+
+
diff --git a/examples/application8/exampleapp.h b/examples/application8/exampleapp.h
new file mode 100644
index 0000000000..8b51c598ea
--- /dev/null
+++ b/examples/application8/exampleapp.h
@@ -0,0 +1,19 @@
+#ifndef __EXAMPLEAPP_H
+#define __EXAMPLEAPP_H
+
+#include
+
+
+#define EXAMPLE_APP_TYPE (example_app_get_type ())
+#define EXAMPLE_APP(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_TYPE, ExampleApp))
+
+
+typedef struct ExampleApp ExampleApp;
+typedef struct ExampleAppClass ExampleAppClass;
+
+
+GType example_app_get_type (void);
+ExampleApp *example_app_new (void);
+
+
+#endif /* __EXAMPLEAPP_H */
diff --git a/examples/application8/exampleappprefs.c b/examples/application8/exampleappprefs.c
new file mode 100644
index 0000000000..75f2ccb164
--- /dev/null
+++ b/examples/application8/exampleappprefs.c
@@ -0,0 +1,71 @@
+#include
+
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include "exampleappprefs.h"
+
+struct ExampleAppPrefs {
+ GtkDialog parent;
+};
+
+struct ExampleAppPrefsClass {
+ GtkDialogClass parent_class;
+};
+
+typedef struct ExampleAppPrefsPrivate ExampleAppPrefsPrivate;
+struct ExampleAppPrefsPrivate {
+ GSettings *settings;
+ GtkWidget *font;
+ GtkWidget *transition;
+ GtkWidget *close;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppPrefs, example_app_prefs, GTK_TYPE_DIALOG)
+
+static void
+example_app_prefs_init (ExampleAppPrefs *prefs)
+{
+ ExampleAppPrefsPrivate *priv;
+
+ priv = example_app_prefs_get_instance_private (prefs);
+ gtk_widget_init_template (GTK_WIDGET (prefs));
+ priv->settings = g_settings_new ("org.gtk.exampleapp");
+
+ g_settings_bind (priv->settings, "font",
+ priv->font, "font",
+ G_SETTINGS_BIND_DEFAULT);
+ g_settings_bind (priv->settings, "transition",
+ priv->transition, "active-id",
+ G_SETTINGS_BIND_DEFAULT);
+ g_signal_connect_swapped (priv->close, "clicked",
+ G_CALLBACK (gtk_widget_destroy), prefs);
+}
+
+static void
+example_app_prefs_dispose (GObject *object)
+{
+ ExampleAppPrefsPrivate *priv;
+
+ priv = example_app_prefs_get_instance_private (EXAMPLE_APP_PREFS (object));
+ g_clear_object (&priv->settings);
+
+ G_OBJECT_CLASS (example_app_prefs_parent_class)->dispose (object);
+}
+
+static void
+example_app_prefs_class_init (ExampleAppPrefsClass *class)
+{
+ G_OBJECT_CLASS (class)->dispose = example_app_prefs_dispose;
+
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/prefs.ui");
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppPrefsPrivate, font);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppPrefsPrivate, transition);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppPrefsPrivate, close);
+}
+
+ExampleAppPrefs *
+example_app_prefs_new (ExampleAppWindow *win)
+{
+ return g_object_new (EXAMPLE_APP_PREFS_TYPE, "transient-for", win, NULL);
+}
diff --git a/examples/application8/exampleappprefs.h b/examples/application8/exampleappprefs.h
new file mode 100644
index 0000000000..fe32a67c1a
--- /dev/null
+++ b/examples/application8/exampleappprefs.h
@@ -0,0 +1,20 @@
+#ifndef __EXAMPLEAPPPREFS_H
+#define __EXAMPLEAPPPREFS_H
+
+#include
+#include "exampleappwin.h"
+
+
+#define EXAMPLE_APP_PREFS_TYPE (example_app_prefs_get_type ())
+#define EXAMPLE_APP_PREFS(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_PREFS_TYPE, ExampleAppPrefs))
+
+
+typedef struct ExampleAppPrefs ExampleAppPrefs;
+typedef struct ExampleAppPrefsClass ExampleAppPrefsClass;
+
+
+GType example_app_prefs_get_type (void);
+ExampleAppPrefs *example_app_prefs_new (ExampleAppWindow *win);
+
+
+#endif /* __EXAMPLEAPPPREFS_H */
diff --git a/examples/application8/exampleappwin.c b/examples/application8/exampleappwin.c
new file mode 100644
index 0000000000..baa3db1383
--- /dev/null
+++ b/examples/application8/exampleappwin.c
@@ -0,0 +1,288 @@
+#include "exampleapp.h"
+#include "exampleappwin.h"
+#include
+
+struct ExampleAppWindow {
+ GtkApplicationWindow parent;
+};
+
+struct ExampleAppWindowClass {
+ GtkApplicationWindowClass parent_class;
+};
+
+typedef struct ExampleAppWindowPrivate ExampleAppWindowPrivate;
+
+struct ExampleAppWindowPrivate {
+ GSettings *settings;
+ GtkWidget *stack;
+ GtkWidget *search;
+ GtkWidget *searchbar;
+ GtkWidget *searchentry;
+ GtkWidget *gears;
+ GtkWidget *sidebar;
+ GtkWidget *words;
+ gulong text_changed_handler;
+ gulong tab_changed_handler;
+ gulong words_changed_handler;
+};
+
+G_DEFINE_TYPE_WITH_PRIVATE(ExampleAppWindow, example_app_window, GTK_TYPE_APPLICATION_WINDOW);
+
+static void
+search_text_changed (GtkEntry *entry,
+ ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+ const gchar *text;
+ GtkWidget *tab;
+ GtkWidget *view;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, match_start, match_end;
+
+ text = gtk_entry_get_text (entry);
+
+ if (text[0] == '\0')
+ return;
+
+ priv = example_app_window_get_instance_private (win);
+
+ tab = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
+ view = gtk_bin_get_child (GTK_BIN (tab));
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ /* Very simple-minded search implementation */
+ gtk_text_buffer_get_start_iter (buffer, &start);
+ if (gtk_text_iter_forward_search (&start, text, GTK_TEXT_SEARCH_CASE_INSENSITIVE,
+ &match_start, &match_end, NULL)) {
+ gtk_text_buffer_select_range (buffer, &match_start, &match_end);
+ gtk_text_view_scroll_to_iter (GTK_TEXT_VIEW (view), &match_start,
+ 0.0, FALSE, 0.0, 0.0);
+ }
+}
+
+static void
+find_word (GtkButton *button,
+ ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+ const gchar *word;
+
+ priv = example_app_window_get_instance_private (win);
+
+ word = gtk_button_get_label (button);
+ gtk_entry_set_text (GTK_ENTRY (priv->searchentry), word);
+}
+
+static void
+update_words (ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+ GHashTable *strings;
+ GHashTableIter iter;
+ GtkWidget *tab, *view, *row;
+ GtkTextBuffer *buffer;
+ GtkTextIter start, end;
+ GList *children, *l;
+ gchar *word, *key;
+
+ priv = example_app_window_get_instance_private (win);
+
+ tab = gtk_stack_get_visible_child (GTK_STACK (priv->stack));
+ view = gtk_bin_get_child (GTK_BIN (tab));
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ strings = g_hash_table_new_full (g_str_hash, g_str_equal, g_free, NULL);
+
+ gtk_text_buffer_get_start_iter (buffer, &start);
+ while (!gtk_text_iter_is_end (&start)) {
+ while (!gtk_text_iter_starts_word (&start)) {
+ if (!gtk_text_iter_forward_char (&start))
+ goto done;
+ }
+ end = start;
+ if (!gtk_text_iter_forward_word_end (&end))
+ goto done;
+ word = gtk_text_buffer_get_text (buffer, &start, &end, FALSE);
+ g_hash_table_add (strings, g_utf8_strdown (word, -1));
+ g_free (word);
+ start = end;
+ }
+
+done:
+ children = gtk_container_get_children (GTK_CONTAINER (priv->words));
+ for (l = children; l; l = l->next) {
+ gtk_container_remove (GTK_CONTAINER (priv->words), GTK_WIDGET (l->data));
+ }
+ g_list_free (children);
+
+ g_hash_table_iter_init (&iter, strings);
+ while (g_hash_table_iter_next (&iter, (gpointer *)&key, NULL)) {
+ row = gtk_button_new_with_label (key);
+ g_signal_connect (row, "clicked",
+ G_CALLBACK (find_word), win);
+ gtk_widget_show (row);
+ gtk_container_add (GTK_CONTAINER (priv->words), row);
+ }
+
+ g_hash_table_unref (strings);
+}
+
+static void
+visible_child_changed (GObject *stack,
+ GParamSpec *pspec,
+ ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+
+ priv = example_app_window_get_instance_private (win);
+ gtk_search_bar_set_search_mode (GTK_SEARCH_BAR (priv->searchbar), FALSE);
+ update_words (win);
+}
+
+static void
+words_changed (GObject *sidebar,
+ GParamSpec *pspec,
+ ExampleAppWindow *win)
+{
+ update_words (win);
+}
+
+static void
+example_app_window_init (ExampleAppWindow *win)
+{
+ ExampleAppWindowPrivate *priv;
+ GtkBuilder *builder;
+ GMenuModel *menu;
+ GAction *action;
+
+ priv = example_app_window_get_instance_private (win);
+ gtk_widget_init_template (GTK_WIDGET (win));
+ priv->settings = g_settings_new ("org.gtk.exampleapp");
+
+ g_settings_bind (priv->settings, "transition",
+ priv->stack, "transition-type",
+ G_SETTINGS_BIND_DEFAULT);
+
+ g_settings_bind (priv->settings, "show-words",
+ priv->sidebar, "reveal-child",
+ G_SETTINGS_BIND_DEFAULT);
+
+ g_object_bind_property (priv->search, "active",
+ priv->searchbar, "search-mode-enabled",
+ G_BINDING_BIDIRECTIONAL);
+
+ priv->text_changed_handler = g_signal_connect (priv->searchentry, "changed",
+ G_CALLBACK (search_text_changed), win);
+ priv->tab_changed_handler = g_signal_connect (priv->stack, "notify::visible-child",
+ G_CALLBACK (visible_child_changed), win);
+ priv->words_changed_handler = g_signal_connect (priv->sidebar, "notify::reveal-child",
+ G_CALLBACK (words_changed), win);
+
+ builder = gtk_builder_new_from_resource ("/org/gtk/exampleapp/gears-menu.ui");
+ menu = G_MENU_MODEL (gtk_builder_get_object (builder, "menu"));
+ gtk_menu_button_set_menu_model (GTK_MENU_BUTTON (priv->gears), menu);
+ g_object_unref (builder);
+
+ action = g_settings_create_action (priv->settings, "show-words");
+ g_action_map_add_action (G_ACTION_MAP (win), action);
+ g_object_unref (action);
+}
+
+static void
+example_app_window_dispose (GObject *object)
+{
+ ExampleAppWindow *win;
+ ExampleAppWindowPrivate *priv;
+
+ win = EXAMPLE_APP_WINDOW (object);
+ priv = example_app_window_get_instance_private (win);
+
+ if (priv->text_changed_handler != 0) {
+ g_signal_handler_disconnect (priv->searchentry, priv->text_changed_handler);
+ priv->text_changed_handler = 0;
+ }
+
+ if (priv->tab_changed_handler != 0) {
+ g_signal_handler_disconnect (priv->stack, priv->tab_changed_handler);
+ priv->tab_changed_handler = 0;
+ }
+
+ if (priv->words_changed_handler != 0) {
+ g_signal_handler_disconnect (priv->sidebar, priv->words_changed_handler);
+ priv->words_changed_handler = 0;
+ }
+
+ g_clear_object (&priv->settings);
+
+ G_OBJECT_CLASS (example_app_window_parent_class)->dispose (object);
+}
+
+static void
+example_app_window_class_init (ExampleAppWindowClass *class)
+{
+ G_OBJECT_CLASS (class)->dispose = example_app_window_dispose;
+
+ gtk_widget_class_set_template_from_resource (GTK_WIDGET_CLASS (class),
+ "/org/gtk/exampleapp/window.ui");
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, stack);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, search);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, searchbar);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, searchentry);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, gears);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, words);
+ gtk_widget_class_bind_child (GTK_WIDGET_CLASS (class), ExampleAppWindowPrivate, sidebar);
+}
+
+ExampleAppWindow *
+example_app_window_new (ExampleApp *app)
+{
+ return g_object_new (EXAMPLE_APP_WINDOW_TYPE, "application", app, NULL);
+}
+
+void
+example_app_window_open (ExampleAppWindow *win,
+ GFile *file)
+{
+ ExampleAppWindowPrivate *priv;
+ gchar *basename;
+ GtkWidget *scrolled, *view;
+ gchar *contents;
+ gsize length;
+ GtkTextBuffer *buffer;
+ GtkTextTag *tag;
+ GtkTextIter start_iter, end_iter;
+
+ priv = example_app_window_get_instance_private (win);
+ basename = g_file_get_basename (file);
+
+ scrolled = gtk_scrolled_window_new (NULL, NULL);
+ gtk_widget_show (scrolled);
+ gtk_widget_set_hexpand (scrolled, TRUE);
+ gtk_widget_set_vexpand (scrolled, TRUE);
+ view = gtk_text_view_new ();
+ gtk_text_view_set_editable (GTK_TEXT_VIEW (view), FALSE);
+ gtk_text_view_set_cursor_visible (GTK_TEXT_VIEW (view), FALSE);
+ gtk_widget_show (view);
+ gtk_container_add (GTK_CONTAINER (scrolled), view);
+ gtk_stack_add_titled (GTK_STACK (priv->stack), scrolled, basename, basename);
+
+ buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
+
+ if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL)) {
+ gtk_text_buffer_set_text (buffer, contents, length);
+ g_free (contents);
+ }
+
+ tag = gtk_text_buffer_create_tag (buffer, NULL, NULL);
+ g_settings_bind (priv->settings, "font", tag, "font", G_SETTINGS_BIND_DEFAULT);
+
+ gtk_text_buffer_get_start_iter (buffer, &start_iter);
+ gtk_text_buffer_get_end_iter (buffer, &end_iter);
+ gtk_text_buffer_apply_tag (buffer, tag, &start_iter, &end_iter);
+
+ g_free (basename);
+
+ gtk_widget_set_sensitive (priv->search, TRUE);
+
+ update_words (win);
+}
diff --git a/examples/application8/exampleappwin.h b/examples/application8/exampleappwin.h
new file mode 100644
index 0000000000..11ff3c27a7
--- /dev/null
+++ b/examples/application8/exampleappwin.h
@@ -0,0 +1,22 @@
+#ifndef __EXAMPLEAPPWIN_H
+#define __EXAMPLEAPPWIN_H
+
+#include
+#include "exampleapp.h"
+
+
+#define EXAMPLE_APP_WINDOW_TYPE (example_app_window_get_type ())
+#define EXAMPLE_APP_WINDOW(obj) (G_TYPE_CHECK_INSTANCE_CAST ((obj), EXAMPLE_APP_WINDOW_TYPE, ExampleAppWindow))
+
+
+typedef struct ExampleAppWindow ExampleAppWindow;
+typedef struct ExampleAppWindowClass ExampleAppWindowClass;
+
+
+GType example_app_window_get_type (void);
+ExampleAppWindow *example_app_window_new (ExampleApp *app);
+void example_app_window_open (ExampleAppWindow *win,
+ GFile *file);
+
+
+#endif /* __EXAMPLEAPPWIN_H */
diff --git a/examples/application8/gears-menu.ui b/examples/application8/gears-menu.ui
new file mode 100644
index 0000000000..7e5df31bf5
--- /dev/null
+++ b/examples/application8/gears-menu.ui
@@ -0,0 +1,12 @@
+
+
+
+
+
diff --git a/examples/application8/main.c b/examples/application8/main.c
new file mode 100644
index 0000000000..7ce327aa0b
--- /dev/null
+++ b/examples/application8/main.c
@@ -0,0 +1,15 @@
+#include
+#include
+
+int
+main (int argc, char *argv[])
+{
+ /* Since this example is running uninstalled,
+ * we have to help it find its schema. This
+ * is *not* necessary in properly installed
+ * application.
+ */
+ g_setenv ("GSETTINGS_SCHEMA_DIR", ".", FALSE);
+
+ return g_application_run (G_APPLICATION (example_app_new ()), argc, argv);
+}
diff --git a/examples/application8/org.gtk.exampleapp.gschema.xml b/examples/application8/org.gtk.exampleapp.gschema.xml
new file mode 100644
index 0000000000..218ae80ecf
--- /dev/null
+++ b/examples/application8/org.gtk.exampleapp.gschema.xml
@@ -0,0 +1,25 @@
+
+
+
+
+
+
+
+
+
+ 'Monospace 12'
+ Font
+ The font to be used for content.
+
+
+ 'none'
+ Transition
+ The transition to use when switching tabs.
+
+
+ false
+ Show words
+ Whether to show a word list in the sidebar
+
+
+
diff --git a/examples/application8/prefs.ui b/examples/application8/prefs.ui
new file mode 100644
index 0000000000..4e846b8e15
--- /dev/null
+++ b/examples/application8/prefs.ui
@@ -0,0 +1,82 @@
+
+
+
+
+ Preferences
+ False
+ True
+
+
+
+
+ True
+ 6
+ 12
+ 6
+
+
+ True
+ _Font:
+ True
+ font
+ 1
+
+
+ 0
+ 0
+
+
+
+
+ True
+
+
+ 1
+ 0
+
+
+
+
+ True
+ _Transition:
+ True
+ transition
+ 1
+
+
+ 0
+ 1
+
+
+
+
+ True
+
+ - None
+ - Fade
+ - Slide
+
+
+
+ 1
+ 1
+
+
+
+
+
+
+ True
+
+
+ True
+ _Close
+ True
+
+
+
+
+
+
+
+
diff --git a/examples/application8/window.ui b/examples/application8/window.ui
new file mode 100644
index 0000000000..7463cc1236
--- /dev/null
+++ b/examples/application8/window.ui
@@ -0,0 +1,96 @@
+
+
+
+
+ Example Application
+ 600
+ 400
+
+
+ True
+ vertical
+
+
+
+
+
+ True
+
+
+ True
+
+
+
+
+
+
+ True
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+