forked from AuroraMiddleware/gtk
Add a GtkApplication example to gtk3-demo
This commit is contained in:
parent
3b6665aad2
commit
45d9b912d9
@ -6,6 +6,7 @@ democodedir=$(datadir)/gtk-$(GTK_API_VERSION)/demo
|
|||||||
## These should be in the order you want them to appear in the
|
## These should be in the order you want them to appear in the
|
||||||
## demo app, which means alphabetized by demo title, not filename
|
## demo app, which means alphabetized by demo title, not filename
|
||||||
demos = \
|
demos = \
|
||||||
|
application.c \
|
||||||
appwindow.c \
|
appwindow.c \
|
||||||
assistant.c \
|
assistant.c \
|
||||||
builder.c \
|
builder.c \
|
||||||
@ -65,13 +66,17 @@ LDADDS = \
|
|||||||
$(GTK_DEP_LIBS) \
|
$(GTK_DEP_LIBS) \
|
||||||
-lm
|
-lm
|
||||||
|
|
||||||
bin_PROGRAMS = gtk3-demo
|
bin_PROGRAMS = gtk3-demo gtk3-demo-application
|
||||||
|
|
||||||
BUILT_SOURCES = demos.h
|
BUILT_SOURCES = demos.h application_resources.c
|
||||||
|
|
||||||
EXTRA_DIST += \
|
EXTRA_DIST += \
|
||||||
$(IMAGEFILES) \
|
$(IMAGEFILES) \
|
||||||
demo.ui
|
demo.ui \
|
||||||
|
application.gresource.xml \
|
||||||
|
application.ui \
|
||||||
|
gtk-logo-24.png \
|
||||||
|
gtk-logo-48.png
|
||||||
|
|
||||||
demos.h: @REBUILD@ $(demos) geninclude.pl
|
demos.h: @REBUILD@ $(demos) geninclude.pl
|
||||||
$(AM_V_GEN) (here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos)) > demos.h
|
$(AM_V_GEN) (here=`pwd` ; cd $(srcdir) && $(PERL) $$here/geninclude.pl $(demos)) > demos.h
|
||||||
@ -86,8 +91,17 @@ gtk3_demo_DEPENDENCIES = $(DEPS)
|
|||||||
gtk3_demo_LDADD = $(LDADDS)
|
gtk3_demo_LDADD = $(LDADDS)
|
||||||
gtk3_demo_LDFLAGS = -export-dynamic
|
gtk3_demo_LDFLAGS = -export-dynamic
|
||||||
|
|
||||||
|
gtk3_demo_application_SOURCES = \
|
||||||
|
application-standalone.c \
|
||||||
|
application_resources.c
|
||||||
|
|
||||||
|
gtk3_demo_application_LDADD = $(LDADDS)
|
||||||
|
|
||||||
|
application_resources.c: application.gresource.xml gtk-logo-24.png gtk-logo-48.png application.ui
|
||||||
|
glib-compile-resources --target=$@ --sourcedir=$(srcdir) --generate-source $(srcdir)/application.gresource.xml
|
||||||
|
|
||||||
IMAGEFILES= alphatest.png \
|
IMAGEFILES= alphatest.png \
|
||||||
apple-red.png \
|
apple-red.png \
|
||||||
background.jpg \
|
background.jpg \
|
||||||
floppybuddy.gif \
|
floppybuddy.gif \
|
||||||
gnome-applets.png \
|
gnome-applets.png \
|
||||||
|
461
demos/gtk-demo/application.c
Normal file
461
demos/gtk-demo/application.c
Normal file
@ -0,0 +1,461 @@
|
|||||||
|
/* Application class
|
||||||
|
*
|
||||||
|
* Demonstrates a simple application.
|
||||||
|
*
|
||||||
|
* This examples uses GtkApplication, GtkApplicationWindow, GtkBuilder
|
||||||
|
* as well as GMenu and GResource. Due to the way GtkApplication is structured,
|
||||||
|
* it is run as a separate process.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "config.h"
|
||||||
|
|
||||||
|
#include <gtk/gtk.h>
|
||||||
|
|
||||||
|
#ifdef STANDALONE
|
||||||
|
|
||||||
|
static void
|
||||||
|
show_action_dialog (GSimpleAction *action)
|
||||||
|
{
|
||||||
|
const gchar *name;
|
||||||
|
GtkWidget *dialog;
|
||||||
|
|
||||||
|
name = g_action_get_name (G_ACTION (action));
|
||||||
|
|
||||||
|
dialog = gtk_message_dialog_new (NULL,
|
||||||
|
GTK_DIALOG_DESTROY_WITH_PARENT,
|
||||||
|
GTK_MESSAGE_INFO,
|
||||||
|
GTK_BUTTONS_CLOSE,
|
||||||
|
"You activated action: \"%s\"",
|
||||||
|
name);
|
||||||
|
|
||||||
|
g_signal_connect (dialog, "response",
|
||||||
|
G_CALLBACK (gtk_widget_destroy), NULL);
|
||||||
|
|
||||||
|
gtk_widget_show (dialog);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
show_action_infobar (GSimpleAction *action,
|
||||||
|
GVariant *parameter,
|
||||||
|
gpointer window)
|
||||||
|
{
|
||||||
|
GtkWidget *infobar;
|
||||||
|
GtkWidget *message;
|
||||||
|
gchar *text;
|
||||||
|
const gchar *name;
|
||||||
|
const gchar *value;
|
||||||
|
|
||||||
|
name = g_action_get_name (G_ACTION (action));
|
||||||
|
value = g_variant_get_string (parameter, NULL);
|
||||||
|
|
||||||
|
message = g_object_get_data (G_OBJECT (window), "message");
|
||||||
|
infobar = g_object_get_data (G_OBJECT (window), "infobar");
|
||||||
|
text = g_strdup_printf ("You activated radio action: \"%s\".\n"
|
||||||
|
"Current value: %s", name, value);
|
||||||
|
gtk_label_set_text (GTK_LABEL (message), text);
|
||||||
|
gtk_widget_show (infobar);
|
||||||
|
g_free (text);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate_action (GSimpleAction *action,
|
||||||
|
GVariant *parameter,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
show_action_dialog (action);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate_toggle (GSimpleAction *action,
|
||||||
|
GVariant *parameter,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GVariant *state;
|
||||||
|
|
||||||
|
show_action_dialog (action);
|
||||||
|
|
||||||
|
state = g_action_get_state (G_ACTION (action));
|
||||||
|
g_action_change_state (G_ACTION (action), g_variant_new_boolean (!g_variant_get_boolean (state)));
|
||||||
|
g_variant_unref (state);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate_radio (GSimpleAction *action,
|
||||||
|
GVariant *parameter,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
show_action_infobar (action, parameter, user_data);
|
||||||
|
|
||||||
|
g_action_change_state (G_ACTION (action), parameter);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate_about (GSimpleAction *action,
|
||||||
|
GVariant *parameter,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GtkWidget *window = user_data;
|
||||||
|
GdkPixbuf *pixbuf;
|
||||||
|
GInputStream *stream;
|
||||||
|
|
||||||
|
const gchar *authors[] = {
|
||||||
|
"Peter Mattis",
|
||||||
|
"Spencer Kimball",
|
||||||
|
"Josh MacDonald",
|
||||||
|
"and many more...",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
const gchar *documentors[] = {
|
||||||
|
"Owen Taylor",
|
||||||
|
"Tony Gale",
|
||||||
|
"Matthias Clasen <mclasen@redhat.com>",
|
||||||
|
"and many more...",
|
||||||
|
NULL
|
||||||
|
};
|
||||||
|
|
||||||
|
stream = g_resources_open_stream ("/logos/gtk-logo-48.png", 0, NULL);
|
||||||
|
pixbuf = gdk_pixbuf_new_from_stream (stream, NULL, NULL);
|
||||||
|
g_object_unref (stream);
|
||||||
|
|
||||||
|
gtk_show_about_dialog (GTK_WINDOW (window),
|
||||||
|
"program-name", "GTK+ Code Demos",
|
||||||
|
"version", g_strdup_printf ("%s,\nRunning against GTK+ %d.%d.%d",
|
||||||
|
PACKAGE_VERSION,
|
||||||
|
gtk_get_major_version (),
|
||||||
|
gtk_get_minor_version (),
|
||||||
|
gtk_get_micro_version ()),
|
||||||
|
"copyright", "(C) 1997-2009 The GTK+ Team",
|
||||||
|
"license-type", GTK_LICENSE_LGPL_2_1,
|
||||||
|
"website", "http://www.gtk.org",
|
||||||
|
"comments", "Program to demonstrate GTK+ functions.",
|
||||||
|
"authors", authors,
|
||||||
|
"documenters", documentors,
|
||||||
|
"logo", pixbuf,
|
||||||
|
"title", "About GTK+ Code Demos",
|
||||||
|
NULL);
|
||||||
|
g_object_unref (pixbuf);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate_quit (GSimpleAction *action,
|
||||||
|
GVariant *parameter,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GtkApplication *app = user_data;
|
||||||
|
GtkWidget *win;
|
||||||
|
GList *list, *next;
|
||||||
|
|
||||||
|
list = gtk_application_get_windows (app);
|
||||||
|
while (list)
|
||||||
|
{
|
||||||
|
win = list->data;
|
||||||
|
next = list->next;
|
||||||
|
|
||||||
|
gtk_widget_destroy (GTK_WIDGET (win));
|
||||||
|
|
||||||
|
list = next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
register_stock_icons (void)
|
||||||
|
{
|
||||||
|
static gboolean registered = FALSE;
|
||||||
|
|
||||||
|
if (!registered)
|
||||||
|
{
|
||||||
|
GdkPixbuf *pixbuf;
|
||||||
|
GtkIconFactory *factory;
|
||||||
|
GtkIconSet *icon_set;
|
||||||
|
GInputStream *stream;
|
||||||
|
|
||||||
|
static GtkStockItem items[] = {
|
||||||
|
{ "demo-gtk-logo", "_GTK!", 0, 0, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
registered = TRUE;
|
||||||
|
|
||||||
|
gtk_stock_add (items, G_N_ELEMENTS (items));
|
||||||
|
|
||||||
|
factory = gtk_icon_factory_new ();
|
||||||
|
gtk_icon_factory_add_default (factory);
|
||||||
|
|
||||||
|
stream = g_resources_open_stream ("/logos/gtk-logo-24.png", 0, NULL);
|
||||||
|
pixbuf = gdk_pixbuf_new_from_stream (stream, NULL, NULL);
|
||||||
|
g_object_unref (stream);
|
||||||
|
|
||||||
|
icon_set = gtk_icon_set_new_from_pixbuf (pixbuf);
|
||||||
|
gtk_icon_factory_add (factory, "demo-gtk-logo", icon_set);
|
||||||
|
gtk_icon_set_unref (icon_set);
|
||||||
|
g_object_unref (pixbuf);
|
||||||
|
|
||||||
|
/* Drop our reference to the factory, GTK will hold a reference. */
|
||||||
|
g_object_unref (factory);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
update_statusbar (GtkTextBuffer *buffer,
|
||||||
|
GtkStatusbar *statusbar)
|
||||||
|
{
|
||||||
|
gchar *msg;
|
||||||
|
gint row, col;
|
||||||
|
gint count;
|
||||||
|
GtkTextIter iter;
|
||||||
|
|
||||||
|
/* clear any previous message, underflow is allowed */
|
||||||
|
gtk_statusbar_pop (statusbar, 0);
|
||||||
|
|
||||||
|
count = gtk_text_buffer_get_char_count (buffer);
|
||||||
|
|
||||||
|
gtk_text_buffer_get_iter_at_mark (buffer,
|
||||||
|
&iter,
|
||||||
|
gtk_text_buffer_get_insert (buffer));
|
||||||
|
|
||||||
|
row = gtk_text_iter_get_line (&iter);
|
||||||
|
col = gtk_text_iter_get_line_offset (&iter);
|
||||||
|
|
||||||
|
msg = g_strdup_printf ("Cursor at row %d column %d - %d chars in document",
|
||||||
|
row, col, count);
|
||||||
|
|
||||||
|
gtk_statusbar_push (statusbar, 0, msg);
|
||||||
|
|
||||||
|
g_free (msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
mark_set_callback (GtkTextBuffer *buffer,
|
||||||
|
const GtkTextIter *new_location,
|
||||||
|
GtkTextMark *mark,
|
||||||
|
gpointer data)
|
||||||
|
{
|
||||||
|
update_statusbar (buffer, GTK_STATUSBAR (data));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
change_theme_state (GSimpleAction *action,
|
||||||
|
GVariant *state,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GtkSettings *settings = gtk_settings_get_default ();
|
||||||
|
|
||||||
|
g_object_set (G_OBJECT (settings),
|
||||||
|
"gtk-application-prefer-dark-theme",
|
||||||
|
g_variant_get_boolean (state),
|
||||||
|
NULL);
|
||||||
|
|
||||||
|
g_simple_action_set_state (action, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
change_titlebar_state (GSimpleAction *action,
|
||||||
|
GVariant *state,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
GtkWindow *window = user_data;
|
||||||
|
|
||||||
|
gtk_window_set_hide_titlebar_when_maximized (GTK_WINDOW (window),
|
||||||
|
g_variant_get_boolean (state));
|
||||||
|
|
||||||
|
g_simple_action_set_state (action, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
change_radio_state (GSimpleAction *action,
|
||||||
|
GVariant *state,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
g_simple_action_set_state (action, state);
|
||||||
|
}
|
||||||
|
|
||||||
|
static GActionEntry app_entries[] = {
|
||||||
|
{ "new", activate_action, NULL, NULL, NULL },
|
||||||
|
{ "open", activate_action, NULL, NULL, NULL },
|
||||||
|
{ "save", activate_action, NULL, NULL, NULL },
|
||||||
|
{ "save-as", activate_action, NULL, NULL, NULL },
|
||||||
|
{ "quit", activate_quit, NULL, NULL, NULL },
|
||||||
|
{ "dark", activate_toggle, NULL, "false", change_theme_state }
|
||||||
|
};
|
||||||
|
|
||||||
|
static GActionEntry win_entries[] = {
|
||||||
|
{ "titlebar", activate_toggle, NULL, "false", change_titlebar_state },
|
||||||
|
{ "color", activate_radio, "s", "'red'", change_radio_state },
|
||||||
|
{ "shape", activate_radio, "s", "'oval'", change_radio_state },
|
||||||
|
{ "bold", activate_toggle, NULL, "false", NULL },
|
||||||
|
{ "about", activate_about, NULL, NULL, NULL },
|
||||||
|
{ "logo", activate_action, NULL, NULL, NULL }
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
clicked_cb (GtkWidget *widget, GtkWidget *info)
|
||||||
|
{
|
||||||
|
gtk_widget_hide (info);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
activate (GApplication *app)
|
||||||
|
{
|
||||||
|
GtkBuilder *builder;
|
||||||
|
GtkWidget *window;
|
||||||
|
GtkWidget *grid;
|
||||||
|
GtkWidget *contents;
|
||||||
|
GtkWidget *status;
|
||||||
|
GtkWidget *message;
|
||||||
|
GtkWidget *button;
|
||||||
|
GtkWidget *infobar;
|
||||||
|
GtkTextBuffer *buffer;
|
||||||
|
GMenuModel *appmenu, *menubar;
|
||||||
|
GBytes *bytes;
|
||||||
|
const gchar *data;
|
||||||
|
gsize size;
|
||||||
|
|
||||||
|
window = gtk_application_window_new (GTK_APPLICATION (app));
|
||||||
|
gtk_window_set_title (GTK_WINDOW (window), "Application Class");
|
||||||
|
gtk_window_set_icon_name (GTK_WINDOW (window), "document-open");
|
||||||
|
gtk_window_set_default_size (GTK_WINDOW (window), 200, 200);
|
||||||
|
|
||||||
|
g_action_map_add_action_entries (G_ACTION_MAP (window),
|
||||||
|
win_entries, G_N_ELEMENTS (win_entries),
|
||||||
|
window);
|
||||||
|
|
||||||
|
builder = gtk_builder_new ();
|
||||||
|
|
||||||
|
bytes = g_resources_lookup_data ("/ui/application.ui", 0, NULL);
|
||||||
|
data = g_bytes_get_data (bytes, &size);
|
||||||
|
gtk_builder_add_from_string (builder, data, size, NULL);
|
||||||
|
g_bytes_unref (bytes);
|
||||||
|
|
||||||
|
grid = (GtkWidget *)gtk_builder_get_object (builder, "grid");
|
||||||
|
appmenu = (GMenuModel *)gtk_builder_get_object (builder, "appmenu");
|
||||||
|
menubar = (GMenuModel *)gtk_builder_get_object (builder, "menubar");
|
||||||
|
contents = (GtkWidget *)gtk_builder_get_object (builder, "contents");
|
||||||
|
status = (GtkWidget *)gtk_builder_get_object (builder, "status");
|
||||||
|
message = (GtkWidget *)gtk_builder_get_object (builder, "message");
|
||||||
|
button = (GtkWidget *)gtk_builder_get_object (builder, "button");
|
||||||
|
infobar = (GtkWidget *)gtk_builder_get_object (builder, "infobar");
|
||||||
|
|
||||||
|
g_object_set_data (G_OBJECT (window), "message", message);
|
||||||
|
g_object_set_data (G_OBJECT (window), "infobar", infobar);
|
||||||
|
|
||||||
|
gtk_container_add (GTK_CONTAINER (window), grid);
|
||||||
|
gtk_application_set_app_menu (GTK_APPLICATION (app), appmenu);
|
||||||
|
gtk_application_set_menubar (GTK_APPLICATION (app), menubar);
|
||||||
|
|
||||||
|
gtk_widget_grab_focus (contents);
|
||||||
|
g_signal_connect (button, "clicked", G_CALLBACK (clicked_cb), infobar);
|
||||||
|
|
||||||
|
/* Show text widget info in the statusbar */
|
||||||
|
buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (contents));
|
||||||
|
g_signal_connect_object (buffer, "changed",
|
||||||
|
G_CALLBACK (update_statusbar), status, 0);
|
||||||
|
g_signal_connect_object (buffer, "mark-set",
|
||||||
|
G_CALLBACK (mark_set_callback), status, 0);
|
||||||
|
|
||||||
|
update_statusbar (buffer, GTK_STATUSBAR (status));
|
||||||
|
|
||||||
|
gtk_widget_show_all (window);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
main (int argc, char *argv[])
|
||||||
|
{
|
||||||
|
GtkApplication *app;
|
||||||
|
|
||||||
|
gtk_init (NULL, NULL);
|
||||||
|
|
||||||
|
register_stock_icons ();
|
||||||
|
|
||||||
|
app = gtk_application_new ("org.gtk.Demo", 0);
|
||||||
|
|
||||||
|
g_action_map_add_action_entries (G_ACTION_MAP (app),
|
||||||
|
app_entries, G_N_ELEMENTS (app_entries),
|
||||||
|
app);
|
||||||
|
|
||||||
|
g_signal_connect (app, "activate", G_CALLBACK (activate), NULL);
|
||||||
|
|
||||||
|
g_application_run (G_APPLICATION (app), 0, NULL);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#else /* !STANDALONE */
|
||||||
|
|
||||||
|
static gboolean name_seen;
|
||||||
|
static GtkWidget *placeholder;
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_name_appeared (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
const gchar *name_owner,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
name_seen = TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
on_name_vanished (GDBusConnection *connection,
|
||||||
|
const gchar *name,
|
||||||
|
gpointer user_data)
|
||||||
|
{
|
||||||
|
if (!name_seen)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (placeholder)
|
||||||
|
{
|
||||||
|
gtk_widget_destroy (placeholder);
|
||||||
|
g_object_unref (placeholder);
|
||||||
|
placeholder = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
GtkWidget *
|
||||||
|
do_application (GtkWidget *toplevel)
|
||||||
|
{
|
||||||
|
static guint watch = 0;
|
||||||
|
|
||||||
|
if (watch == 0)
|
||||||
|
watch = g_bus_watch_name (G_BUS_TYPE_SESSION,
|
||||||
|
"org.gtk.Demo",
|
||||||
|
0,
|
||||||
|
on_name_appeared,
|
||||||
|
on_name_vanished,
|
||||||
|
NULL, NULL);
|
||||||
|
|
||||||
|
if (placeholder == NULL)
|
||||||
|
{
|
||||||
|
const gchar *command;
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
|
if (g_file_test ("./gtk3-demo-application", G_FILE_TEST_IS_EXECUTABLE))
|
||||||
|
command = "./gtk3-demo-application";
|
||||||
|
else
|
||||||
|
command = "gtk3-demo-application";
|
||||||
|
|
||||||
|
if (!g_spawn_command_line_async (command, &error))
|
||||||
|
{
|
||||||
|
g_warning ("%s", error->message);
|
||||||
|
g_error_free (error);
|
||||||
|
}
|
||||||
|
|
||||||
|
placeholder = gtk_label_new ("");
|
||||||
|
g_object_ref_sink (placeholder);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
g_dbus_connection_call_sync (g_bus_get_sync (G_BUS_TYPE_SESSION, NULL, NULL),
|
||||||
|
"org.gtk.Demo",
|
||||||
|
"/org/gtk/Demo",
|
||||||
|
"org.gtk.Actions",
|
||||||
|
"Activate",
|
||||||
|
g_variant_new ("(sava{sv})", "quit", NULL, NULL),
|
||||||
|
NULL,
|
||||||
|
0,
|
||||||
|
G_MAXINT,
|
||||||
|
NULL, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
return placeholder;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif
|
10
demos/gtk-demo/application.gresource.xml
Normal file
10
demos/gtk-demo/application.gresource.xml
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<gresources>
|
||||||
|
<gresource prefix="/logos">
|
||||||
|
<file>gtk-logo-24.png</file>
|
||||||
|
<file>gtk-logo-48.png</file>
|
||||||
|
</gresource>
|
||||||
|
<gresource prefix="/ui">
|
||||||
|
<file>application.ui</file>
|
||||||
|
</gresource>
|
||||||
|
</gresources>
|
150
demos/gtk-demo/application.ui
Normal file
150
demos/gtk-demo/application.ui
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
<?xml version="1.0"?>
|
||||||
|
<interface>
|
||||||
|
<object class="GtkGrid" id="grid">
|
||||||
|
<child>
|
||||||
|
<object class="GtkToolbar" id="toolbar">
|
||||||
|
<property name="orientation">horizontal</property>
|
||||||
|
<property name="halign">fill</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuToolButton" id="menu">
|
||||||
|
<property name="stock-id">gtk-open</property>
|
||||||
|
<child type="menu">
|
||||||
|
<object class="GtkMenu" id="m">
|
||||||
|
<child>
|
||||||
|
<object class="GtkMenuItem" id="file">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="label">File1</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkToolButton" id="quit">
|
||||||
|
<property name="stock-id">gtk-quit</property>
|
||||||
|
<property name="action-name">app.quit</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkSeparatorToolItem" id="sep">
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkToolButton" id="logo">
|
||||||
|
<property name="stock-id">demo-gtk-logo</property>
|
||||||
|
<property name="action-name">win.logo</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left-attach">0</property>
|
||||||
|
<property name="top-attach">0</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkInfoBar" id="infobar">
|
||||||
|
<property name="no-show-all">True</property>
|
||||||
|
<property name="halign">fill</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<child internal-child="content_area">
|
||||||
|
<object class="GtkBox" id="content_area">
|
||||||
|
<child>
|
||||||
|
<object class="GtkLabel" id="message">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<property name="halign">fill</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
<child internal-child="action_area">
|
||||||
|
<object class="GtkBox" id="action_area">
|
||||||
|
<child>
|
||||||
|
<object class="GtkButton" id="button">
|
||||||
|
<property name="visible">True</property>
|
||||||
|
<property name="valign">center</property>
|
||||||
|
<property name="label">gtk-ok</property>
|
||||||
|
<property name="use-stock">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left-attach">0</property>
|
||||||
|
<property name="top-attach">1</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkScrolledWindow" id="sw">
|
||||||
|
<property name="shadow-type">in</property>
|
||||||
|
<child>
|
||||||
|
<object class="GtkTextView" id="contents">
|
||||||
|
<property name="halign">fill</property>
|
||||||
|
<property name="valign">fill</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<property name="vexpand">True</property>
|
||||||
|
</object>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left-attach">0</property>
|
||||||
|
<property name="top-attach">2</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
<child>
|
||||||
|
<object class="GtkStatusbar" id="status">
|
||||||
|
<property name="halign">fill</property>
|
||||||
|
<property name="hexpand">True</property>
|
||||||
|
<property name="visible">True</property>
|
||||||
|
</object>
|
||||||
|
<packing>
|
||||||
|
<property name="left-attach">0</property>
|
||||||
|
<property name="top-attach">3</property>
|
||||||
|
</packing>
|
||||||
|
</child>
|
||||||
|
</object>
|
||||||
|
<menu id="appmenu">
|
||||||
|
<section>
|
||||||
|
<item label="_New" action="app.new" accel="<Primary>n"/>
|
||||||
|
<item label="_Open" action="app.open"/>
|
||||||
|
<item label="_Save" action="app.save" accel="<Primary>s"/>
|
||||||
|
<item label="Save _As..." action="app.save-as" accel="<Primary>s"/>
|
||||||
|
</section>
|
||||||
|
<section>
|
||||||
|
<item label="_Quit" action="app.quit" accel="<Primary>q"/>
|
||||||
|
</section>
|
||||||
|
</menu>
|
||||||
|
<menu id="menubar">
|
||||||
|
<section>
|
||||||
|
<submenu label="_Preferences">
|
||||||
|
<section>
|
||||||
|
<item label="_Prefer Dark Theme" action="app.dark"/>
|
||||||
|
<item label="_Hide Titlebar when maximized" action="win.titlebar"/>
|
||||||
|
<submenu label="_Color">
|
||||||
|
<section>
|
||||||
|
<item label="_Red" action="win.color" target="red" accel="<Primary>r"/>
|
||||||
|
<item label="_Green" action="win.color" target="green" accel="<Primary>g"/>
|
||||||
|
<item label="_Blue" action="win.color" target="blue" accel="<Primary>b"/>
|
||||||
|
</section>
|
||||||
|
</submenu>
|
||||||
|
<submenu label="_Shape">
|
||||||
|
<section>
|
||||||
|
<item label="_Square" action="win.shape" target="square" accel="<Primary>s"/>
|
||||||
|
<item label="_Rectangle" action="win.shape" target="rectangle" accel="<Primary>r"/>
|
||||||
|
<item label="_Oval" action="win.shape" target="oval" accel="<Primary>o"/>
|
||||||
|
</section>
|
||||||
|
</submenu>
|
||||||
|
<item label="_Bold" action="win.bold" accel="<Primary>b"/>
|
||||||
|
</section>
|
||||||
|
</submenu>
|
||||||
|
<submenu label="_Help">
|
||||||
|
<section>
|
||||||
|
<item label="_About" action="win.about" accel="<Primary>a"/>
|
||||||
|
</section>
|
||||||
|
</submenu>
|
||||||
|
</section>
|
||||||
|
</menu>
|
||||||
|
</interface>
|
@ -1,6 +1,8 @@
|
|||||||
/* Application main window
|
/* Application window
|
||||||
*
|
*
|
||||||
* Demonstrates a typical application window with menubar, toolbar, statusbar.
|
* Demonstrates a typical application window with menubar, toolbar, statusbar.
|
||||||
|
*
|
||||||
|
* This example uses GtkUIManager and GtkActionGroup.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <gtk/gtk.h>
|
#include <gtk/gtk.h>
|
||||||
|
BIN
demos/gtk-demo/gtk-logo-24.png
Normal file
BIN
demos/gtk-demo/gtk-logo-24.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 674 B |
BIN
demos/gtk-demo/gtk-logo-48.png
Normal file
BIN
demos/gtk-demo/gtk-logo-48.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 2.3 KiB |
@ -782,7 +782,7 @@ create_tree (void)
|
|||||||
GtkTreeIter iter;
|
GtkTreeIter iter;
|
||||||
GtkWidget *box, *label, *scrolled_window;
|
GtkWidget *box, *label, *scrolled_window;
|
||||||
|
|
||||||
Demo *d = testgtk_demos;
|
Demo *d = gtk_demos;
|
||||||
|
|
||||||
model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_INT);
|
model = gtk_tree_store_new (NUM_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_INT);
|
||||||
tree_view = gtk_tree_view_new ();
|
tree_view = gtk_tree_view_new ();
|
||||||
@ -936,10 +936,8 @@ main (int argc, char **argv)
|
|||||||
* these few lines, which are just a hack so gtk-demo will work
|
* these few lines, which are just a hack so gtk-demo will work
|
||||||
* in the GTK tree without installing it.
|
* in the GTK tree without installing it.
|
||||||
*/
|
*/
|
||||||
if (g_file_test ("../../gdk-pixbuf/libpixbufloader-pnm.la",
|
if (g_file_test ("../../modules/input/immodules.cache", G_FILE_TEST_EXISTS))
|
||||||
G_FILE_TEST_EXISTS))
|
|
||||||
{
|
{
|
||||||
g_setenv ("GDK_PIXBUF_MODULE_FILE", "../../gdk-pixbuf/loaders.cache", TRUE);
|
|
||||||
g_setenv ("GTK_IM_MODULE_FILE", "../../modules/input/immodules.cache", TRUE);
|
g_setenv ("GTK_IM_MODULE_FILE", "../../modules/input/immodules.cache", TRUE);
|
||||||
}
|
}
|
||||||
/* -- End of hack -- */
|
/* -- End of hack -- */
|
||||||
@ -1002,7 +1000,7 @@ main (int argc, char **argv)
|
|||||||
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
|
gtk_window_set_default_size (GTK_WINDOW (window), 600, 400);
|
||||||
gtk_widget_show_all (window);
|
gtk_widget_show_all (window);
|
||||||
|
|
||||||
load_file (testgtk_demos[0].filename);
|
load_file (gtk_demos[0].filename);
|
||||||
|
|
||||||
gtk_main ();
|
gtk_main ();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user