5 activate_toggle (GSimpleAction *action,
11 state = g_action_get_state (G_ACTION (action));
12 g_action_change_state (G_ACTION (action), g_variant_new_boolean (!g_variant_get_boolean (state)));
13 g_variant_unref (state);
17 change_fullscreen_state (GSimpleAction *action,
21 if (g_variant_get_boolean (state))
22 gtk_window_fullscreen (user_data);
24 gtk_window_unfullscreen (user_data);
26 g_simple_action_set_state (action, state);
30 get_clipboard (GtkWidget *widget)
32 return gtk_widget_get_clipboard (widget, gdk_atom_intern_static_string ("CLIPBOARD"));
36 window_copy (GSimpleAction *action,
40 GtkWindow *window = GTK_WINDOW (user_data);
41 GtkTextView *text = g_object_get_data ((GObject*)window, "bloatpad-text");
43 gtk_text_buffer_copy_clipboard (gtk_text_view_get_buffer (text),
44 get_clipboard ((GtkWidget*) text));
48 window_paste (GSimpleAction *action,
52 GtkWindow *window = GTK_WINDOW (user_data);
53 GtkTextView *text = g_object_get_data ((GObject*)window, "bloatpad-text");
55 gtk_text_buffer_paste_clipboard (gtk_text_view_get_buffer (text),
56 get_clipboard ((GtkWidget*) text),
62 static GActionEntry win_entries[] = {
63 { "copy", window_copy, NULL, NULL, NULL },
64 { "paste", window_paste, NULL, NULL, NULL },
65 { "fullscreen", activate_toggle, NULL, "false", change_fullscreen_state }
69 new_window (GApplication *app,
72 GtkWidget *window, *grid, *scrolled, *view;
74 window = gtk_application_window_new (GTK_APPLICATION (app));
75 gtk_window_set_default_size ((GtkWindow*)window, 640, 480);
76 g_action_map_add_action_entries (G_ACTION_MAP (window), win_entries, G_N_ELEMENTS (win_entries), window);
77 gtk_window_set_title (GTK_WINDOW (window), "Bloatpad");
79 grid = gtk_grid_new ();
80 gtk_container_add (GTK_CONTAINER (window), grid);
82 scrolled = gtk_scrolled_window_new (NULL, NULL);
83 gtk_widget_set_hexpand (scrolled, TRUE);
84 gtk_widget_set_vexpand (scrolled, TRUE);
85 view = gtk_text_view_new ();
87 g_object_set_data ((GObject*)window, "bloatpad-text", view);
89 gtk_container_add (GTK_CONTAINER (scrolled), view);
91 gtk_grid_attach (GTK_GRID (grid), scrolled, 0, 0, 1, 1);
98 if (g_file_load_contents (file, NULL, &contents, &length, NULL, NULL))
100 GtkTextBuffer *buffer;
102 buffer = gtk_text_view_get_buffer (GTK_TEXT_VIEW (view));
103 gtk_text_buffer_set_text (buffer, contents, length);
108 gtk_widget_show_all (GTK_WIDGET (window));
112 bloat_pad_activate (GApplication *application)
114 new_window (application, NULL);
118 bloat_pad_open (GApplication *application,
125 for (i = 0; i < n_files; i++)
126 new_window (application, files[i]);
129 typedef GtkApplication BloatPad;
130 typedef GtkApplicationClass BloatPadClass;
132 G_DEFINE_TYPE (BloatPad, bloat_pad, GTK_TYPE_APPLICATION)
135 bloat_pad_finalize (GObject *object)
137 G_OBJECT_CLASS (bloat_pad_parent_class)->finalize (object);
141 show_about (GSimpleAction *action,
145 gtk_show_about_dialog (NULL,
146 "program-name", "Bloatpad",
147 "title", "About Bloatpad",
148 "comments", "Not much to say, really.",
154 quit_app (GSimpleAction *action,
161 g_print ("Going down...\n");
163 list = gtk_application_get_windows (GTK_APPLICATION (g_application_get_default ()));
169 gtk_widget_destroy (GTK_WIDGET (win));
175 static GActionEntry app_entries[] = {
176 { "about", show_about, NULL, NULL, NULL },
177 { "quit", quit_app, NULL, NULL, NULL },
181 bloat_pad_startup (GApplication *application)
185 G_APPLICATION_CLASS (bloat_pad_parent_class)
186 ->startup (application);
188 g_action_map_add_action_entries (G_ACTION_MAP (application), app_entries, G_N_ELEMENTS (app_entries), application);
190 builder = gtk_builder_new ();
191 gtk_builder_add_from_string (builder,
193 " <menu id='app-menu'>"
194 " <item label='_About Bloatpad' action='app.about'/>"
195 " <item label='_Quit' action='app.quit'/>"
197 " <menu id='menubar'>"
198 " <submenu label='_Edit'>"
199 " <item label='_Copy' action='win.copy'/>"
200 " <item label='_Paste' action='win.paste'/>"
202 " <submenu label='_View'>"
203 " <item label='_Fullscreen' action='win.fullscreen'/>"
206 "</interface>", -1, NULL);
207 g_application_set_app_menu (application, G_MENU_MODEL (gtk_builder_get_object (builder, "app-menu")));
208 g_application_set_menubar (application, G_MENU_MODEL (gtk_builder_get_object (builder, "menubar")));
209 g_object_unref (builder);
213 bloat_pad_init (BloatPad *app)
218 bloat_pad_class_init (BloatPadClass *class)
220 GApplicationClass *application_class = G_APPLICATION_CLASS (class);
221 GObjectClass *object_class = G_OBJECT_CLASS (class);
223 application_class->startup = bloat_pad_startup;
224 application_class->activate = bloat_pad_activate;
225 application_class->open = bloat_pad_open;
227 object_class->finalize = bloat_pad_finalize;
236 return g_object_new (bloat_pad_get_type (),
237 "application-id", "org.gtk.Test.bloatpad",
238 "flags", G_APPLICATION_HANDLES_OPEN,
243 main (int argc, char **argv)
248 bloat_pad = bloat_pad_new ();
249 status = g_application_run (G_APPLICATION (bloat_pad), argc, argv);
250 g_object_unref (bloat_pad);