diff options
Diffstat (limited to 'gtk+-mingw/share/gtk-3.0/demo/application.c')
-rw-r--r-- | gtk+-mingw/share/gtk-3.0/demo/application.c | 485 |
1 files changed, 0 insertions, 485 deletions
diff --git a/gtk+-mingw/share/gtk-3.0/demo/application.c b/gtk+-mingw/share/gtk-3.0/demo/application.c deleted file mode 100644 index 6889e61..0000000 --- a/gtk+-mingw/share/gtk-3.0/demo/application.c +++ /dev/null @@ -1,485 +0,0 @@ -/* Application class :: menus.ui application.ui - * - * 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; - - 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 - }; - - pixbuf = gdk_pixbuf_new_from_resource ("/application/logos/gtk-logo-48.png", NULL); - - 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; - - 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); - - pixbuf = gdk_pixbuf_new_from_resource ("/application/logos/gtk-logo-24.png", NULL); - - 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 }, - { "shape", activate_radio, "s", "'oval'", change_radio_state }, - { "bold", activate_toggle, NULL, "false", NULL }, - { "about", activate_about, NULL, NULL, NULL }, - { "file1", activate_action, NULL, NULL, NULL }, - { "logo", activate_action, NULL, NULL, NULL } -}; - -static void -clicked_cb (GtkWidget *widget, GtkWidget *info) -{ - gtk_widget_hide (info); -} - -static void -startup (GApplication *app) -{ - GtkBuilder *builder; - GMenuModel *appmenu; - GMenuModel *menubar; - - builder = gtk_builder_new (); - gtk_builder_add_from_resource (builder, "/application/ui/menus.ui", NULL); - - appmenu = (GMenuModel *)gtk_builder_get_object (builder, "appmenu"); - menubar = (GMenuModel *)gtk_builder_get_object (builder, "menubar"); - - gtk_application_set_app_menu (GTK_APPLICATION (app), appmenu); - gtk_application_set_menubar (GTK_APPLICATION (app), menubar); - - g_object_unref (builder); -} - -static void -activate (GApplication *app) -{ - GtkBuilder *builder; - GtkWidget *window; - GtkWidget *grid; - GtkWidget *contents; - GtkWidget *status; - GtkWidget *message; - GtkWidget *button; - GtkWidget *infobar; - GtkWidget *menutool; - GMenuModel *toolmenu; - GtkTextBuffer *buffer; - - 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 (); - gtk_builder_add_from_resource (builder, "/application/ui/application.ui", NULL); - - grid = (GtkWidget *)gtk_builder_get_object (builder, "grid"); - 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"); - menutool = (GtkWidget *)gtk_builder_get_object (builder, "menutool"); - toolmenu = (GMenuModel *)gtk_builder_get_object (builder, "toolmenu"); - - 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_menu_tool_button_set_menu (GTK_MENU_TOOL_BUTTON (menutool), - gtk_menu_new_from_model (toolmenu)); - - 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); - - g_object_unref (builder); -} - -int -main (int argc, char *argv[]) -{ - GtkApplication *app; - GSettings *settings; - GAction *action; - - gtk_init (NULL, NULL); - - register_stock_icons (); - - app = gtk_application_new ("org.gtk.Demo", 0); - settings = g_settings_new ("org.gtk.Demo"); - - g_action_map_add_action_entries (G_ACTION_MAP (app), - app_entries, G_N_ELEMENTS (app_entries), - app); - - action = g_settings_create_action (settings, "color"); - - g_action_map_add_action (G_ACTION_MAP (app), action); - - g_signal_connect (app, "startup", G_CALLBACK (startup), NULL); - 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; - } -} - -#ifdef G_OS_WIN32 -#define APP_EXTENSION ".exe" -#else -#define APP_EXTENSION -#endif - -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" APP_EXTENSION, G_FILE_TEST_IS_EXECUTABLE)) - command = "./gtk3-demo-application" APP_EXTENSION; - 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 |