1 /*-
2 * vi:set et ai sts=2 sw=2 cindent:
3 *
4 * Copyright (c) 2016 Eric Koegel <eric@xfce.org>
5 *
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Library General Public
8 * License as published by the Free Software Foundation; either
9 * version 2 of the License, or (at your option) any later version.
10 *
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Library General Public License for more details.
15 *
16 * You should have received a copy of the GNU Library General
17 * Public License along with this library; if not, write to the
18 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
19 * Boston, MA 02110-1301, USA.
20 */
21
22 #ifdef HAVE_CONFIG_H
23 #include <config.h>
24 #endif
25
26 #include <stdlib.h>
27
28 #include <gtk/gtk.h>
29 #include <glib.h>
30 #include <libxfce4ui/libxfce4ui.h>
31
32
33 static const gchar *APP_NAME = "libxfce4ui: Test";
34
35 static void
main_window_destroy(GtkWidget * window)36 main_window_destroy (GtkWidget *window)
37 {
38 gtk_main_quit ();
39 }
40
41 static void
show_xfce_message_dialog(GtkButton * button,gpointer unused)42 show_xfce_message_dialog (GtkButton *button,
43 gpointer unused)
44 {
45 GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file_at_size ("../icons/48x48/xfce4-logo.png", 24, 24, NULL);
46
47 xfce_message_dialog (NULL, "Question - Gtk3 version with no deprecated symbols",
48 "dialog-question",
49 "There are unsaved modifications",
50 "The menu has been modified, do you want to save it before quitting?",
51 XFCE_BUTTON_TYPE_MIXED, "document-save", "Save", GTK_RESPONSE_YES,
52 XFCE_BUTTON_TYPE_MIXED, "edit-delete", "Forget modifications", GTK_RESPONSE_APPLY,
53 XFCE_BUTTON_TYPE_PIXBUF, pixbuf, "Quit", GTK_RESPONSE_NO,
54 XFCE_BUTTON_TYPE_MIXED, "process-stop", "Cancel", GTK_RESPONSE_CANCEL,
55 NULL);
56
57 if (pixbuf != NULL)
58 {
59 g_object_unref (G_OBJECT (pixbuf));
60 }
61 }
62
63 static void
show_xfce_dialog_show_help(GtkButton * button,gpointer unused)64 show_xfce_dialog_show_help (GtkButton *button,
65 gpointer unused)
66 {
67 xfce_dialog_show_help (NULL, "xfce4-session", "preferences", NULL);
68 }
69
70 static void
show_xfce_dialog_show_help_with_version(GtkButton * button,gpointer unused)71 show_xfce_dialog_show_help_with_version (GtkButton *button,
72 gpointer unused)
73 {
74 xfce_dialog_show_help_with_version (NULL, "xfce4-power-manager", "start", NULL, "4.14");
75 }
76
77 static void
remove_auto_online(GtkButton * button,gpointer unused)78 remove_auto_online (GtkButton *button,
79 gpointer unused)
80 {
81 XfceRc *rc;
82 gboolean response;
83
84 response = xfce_dialog_confirm (NULL, "system-run", "Execute",
85 "Removing this will enable the show help "
86 "dialogs to appear. Do you want to do this?",
87 "Remove auto-online in rc file? (Gtk3)");
88
89 if (response == FALSE)
90 return;
91
92 rc = xfce_rc_config_open (XFCE_RESOURCE_CONFIG, "xfce4/help.rc", FALSE);
93 if (rc != NULL)
94 {
95 xfce_rc_write_bool_entry (rc, "auto-online", FALSE);
96 xfce_rc_close (rc);
97 }
98 }
99
100 static void
show_xfce_dialog_show_info(GtkButton * button,gpointer unused)101 show_xfce_dialog_show_info (GtkButton *button,
102 gpointer unused)
103 {
104 xfce_dialog_show_info(NULL, NULL, "%s", "xfburn_transcoder_get_description (priv->trans)");
105 }
106
107 static void
show_xfce_dialog_show_warning(GtkButton * button,gpointer unused)108 show_xfce_dialog_show_warning (GtkButton *button,
109 gpointer unused)
110 {
111 xfce_dialog_show_warning(NULL, NULL, _("A file named \"%s\" already exists in this directory, the file hasn't been added."), "name");
112 }
113
114 static void
show_xfce_dialog_show_error(GtkButton * button,gpointer unused)115 show_xfce_dialog_show_error (GtkButton *button,
116 gpointer unused)
117 {
118 GError *error = NULL;
119
120 g_set_error (&error, G_FILE_ERROR, G_FILE_ERROR_NOENT, "This isn't a real error");
121
122 xfce_dialog_show_error (NULL, error, _("Failed to migrate the old panel configuration"));
123
124 g_clear_error (&error);
125 }
126
127 static void
show_xfce_dialog_confirm(GtkButton * button,gpointer unused)128 show_xfce_dialog_confirm (GtkButton *button,
129 gpointer unused)
130 {
131 xfce_dialog_confirm (NULL, "system-run", "Execute",
132 "Do you want to start the panel? If you do, make sure "
133 "you save the session on logout, so the panel is "
134 "automatically started the next time you login.",
135 "No running instance of %s was found", G_LOG_DOMAIN);
136 }
137
138 static void
show_xfce_dialog_confirm_close_tabs(GtkButton * button,gpointer unused)139 show_xfce_dialog_confirm_close_tabs (GtkButton *button,
140 gpointer unused)
141 {
142 gboolean checked = TRUE;
143 xfce_dialog_confirm_close_tabs (NULL,
144 3,
145 TRUE,
146 &checked);
147 }
148
149 static void
close_window(GtkDialog * dialog,gint response_id,gpointer user_data)150 close_window (GtkDialog *dialog,
151 gint response_id,
152 gpointer user_data)
153 {
154 gtk_widget_destroy (GTK_WIDGET (dialog));
155 }
156
157 static void
show_xfce_titled_dialog_new_with_buttons(GtkButton * button,gpointer unused)158 show_xfce_titled_dialog_new_with_buttons (GtkButton *button,
159 gpointer unused)
160 {
161 GtkWidget *dialog_gtk3;
162
163 dialog_gtk3 = xfce_titled_dialog_new_with_buttons ("Settings Editor (Gtk3)", NULL,
164 GTK_DIALOG_DESTROY_WITH_PARENT,
165 "help-browser", GTK_RESPONSE_HELP,
166 "window-close-symbolic", GTK_RESPONSE_OK,
167 NULL);
168
169 xfce_titled_dialog_set_subtitle (XFCE_TITLED_DIALOG (dialog_gtk3),
170 _("Customize settings stored by Xfconf"));
171
172 gtk_window_set_icon_name (GTK_WINDOW (dialog_gtk3), "preferences-system");
173 gtk_window_set_type_hint (GTK_WINDOW (dialog_gtk3), GDK_WINDOW_TYPE_HINT_NORMAL);
174
175 g_signal_connect (dialog_gtk3, "response", G_CALLBACK (close_window), NULL);
176
177 gtk_widget_show_all (dialog_gtk3);
178 }
179
180 static void
show_xfce_titled_dialog_new_with_mixed_buttons(GtkButton * button,gpointer unused)181 show_xfce_titled_dialog_new_with_mixed_buttons (GtkButton *button,
182 gpointer unused)
183 {
184 GtkWidget *dialog_gtk3;
185
186 dialog_gtk3 = xfce_titled_dialog_new_with_mixed_buttons ("Settings Editor (Gtk3)", NULL,
187 GTK_DIALOG_DESTROY_WITH_PARENT,
188 "help-browser", "Help", GTK_RESPONSE_HELP,
189 "weather-snow", "Snow!", GTK_RESPONSE_APPLY,
190 "", "no icon", GTK_RESPONSE_CANCEL,
191 "window-close-symbolic", "Close", GTK_RESPONSE_OK,
192 NULL);
193
194 xfce_titled_dialog_set_subtitle (XFCE_TITLED_DIALOG (dialog_gtk3),
195 _("Customize settings stored by Xfconf"));
196
197 gtk_window_set_icon_name (GTK_WINDOW (dialog_gtk3), "preferences-system");
198 gtk_window_set_type_hint (GTK_WINDOW (dialog_gtk3), GDK_WINDOW_TYPE_HINT_NORMAL);
199
200 g_signal_connect (dialog_gtk3, "response", G_CALLBACK (close_window), NULL);
201
202 gtk_widget_show_all (dialog_gtk3);
203
204 }
205
206 static void
show_xfce_gdk_screen_get_active(GtkButton * button,gpointer unused)207 show_xfce_gdk_screen_get_active (GtkButton *button,
208 gpointer unused)
209 {
210 gint monitor_num;
211 GdkScreen *screen;
212
213 screen = xfce_gdk_screen_get_active (&monitor_num);
214
215 xfce_dialog_show_info (NULL, NULL, "monitor num: %d of %d",
216 monitor_num, gdk_screen_get_n_monitors (screen));
217 }
218
219 static void
show_xfce_filename_input_dialog(GtkButton * button,gpointer unused)220 show_xfce_filename_input_dialog (GtkButton *button,
221 gpointer unused)
222 {
223 GtkWidget *dialog;
224 XfceFilenameInput *filename_input;
225
226 dialog = gtk_dialog_new_with_buttons ("Enter file name",
227 NULL,
228 GTK_DIALOG_MODAL
229 | GTK_DIALOG_DESTROY_WITH_PARENT,
230 "Cancel", GTK_RESPONSE_CANCEL,
231 "Submit", GTK_RESPONSE_OK,
232 NULL);
233 gtk_dialog_set_default_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK);
234 gtk_window_set_default_size (GTK_WINDOW (dialog), 250, -1);
235
236 filename_input = g_object_new (XFCE_TYPE_FILENAME_INPUT,
237 "original-filename", "example.txt", "max-text-length", 30, NULL);
238 gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (dialog))),
239 GTK_WIDGET (filename_input));
240 gtk_widget_show_all (GTK_WIDGET (filename_input));
241
242 g_signal_connect_swapped (filename_input, "text-invalid", G_CALLBACK (xfce_filename_input_desensitise_widget),
243 gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK));
244 g_signal_connect_swapped (filename_input, "text-valid", G_CALLBACK (xfce_filename_input_sensitise_widget),
245 gtk_dialog_get_widget_for_response (GTK_DIALOG (dialog), GTK_RESPONSE_OK));
246 xfce_filename_input_check (filename_input); /* this call ensures that the "Submit" button has its
247 sensitivity set correctly */
248 gtk_dialog_run (GTK_DIALOG (dialog));
249 gtk_widget_destroy (dialog);
250 }
251
252
253
254 static void
create_main_window(void)255 create_main_window (void)
256 {
257 GtkWidget *window;
258 GtkWidget *grid;
259 GtkWidget *button;
260 GtkWidget *label;
261
262 /* Create main window */
263 window = xfce_titled_dialog_new_with_mixed_buttons (APP_NAME, NULL,
264 GTK_DIALOG_DESTROY_WITH_PARENT,
265 "window-close-symbolic", "_Close", GTK_RESPONSE_CLOSE,
266 NULL);
267
268
269 gtk_window_set_icon_name (GTK_WINDOW (window), "xfce4-logo");
270 gtk_window_set_position (GTK_WINDOW (window), GTK_WIN_POS_CENTER);
271 gtk_container_set_border_width (GTK_CONTAINER (window), 12);
272
273 /* Exit main loop when when the window is closed */
274 g_signal_connect (G_OBJECT (window), "destroy", G_CALLBACK (main_window_destroy), NULL);
275 g_signal_connect (G_OBJECT (window), "response", G_CALLBACK (main_window_destroy), NULL);
276
277 /* Create the grid to hold all the stuff */
278 grid = gtk_grid_new ();
279 gtk_grid_set_row_spacing (GTK_GRID (grid), 6);
280 gtk_grid_set_column_spacing (GTK_GRID (grid), 12);
281 gtk_container_add (GTK_CONTAINER (gtk_dialog_get_content_area (GTK_DIALOG (window))), grid);
282
283 /* Create buttons */
284 /* Xfce Dialogs */
285 label = gtk_label_new ("Xfce Dialogs");
286 gtk_grid_attach (GTK_GRID (grid), label, 0, 0, 1, 1);
287
288 /* xfce_message_dialog */
289 button = gtk_button_new_with_label ("xfce_message_dialog");
290 gtk_grid_attach (GTK_GRID (grid), button, 0, 1, 1, 1);
291 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_message_dialog), NULL);
292
293 /* xfce_dialog_show_info */
294 button = gtk_button_new_with_label ("xfce_dialog_show_info");
295 gtk_grid_attach (GTK_GRID (grid), button, 0, 2, 1, 1);
296 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_dialog_show_info), NULL);
297
298 /* xfce_dialog_show_warning */
299 button = gtk_button_new_with_label ("xfce_dialog_show_warning");
300 gtk_grid_attach (GTK_GRID (grid), button, 0, 3, 1, 1);
301 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_dialog_show_warning), NULL);
302
303 /* xfce_dialog_show_error */
304 button = gtk_button_new_with_label ("xfce_dialog_show_error");
305 gtk_grid_attach (GTK_GRID (grid), button, 0, 4, 1, 1);
306 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_dialog_show_error), NULL);
307
308 /* xfce_dialog_confirm */
309 button = gtk_button_new_with_label ("xfce_dialog_confirm");
310 gtk_grid_attach (GTK_GRID (grid), button, 0, 5, 1, 1);
311 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_dialog_confirm), NULL);
312
313 /* xfce_dialog_confirm_close_tabs */
314 button = gtk_button_new_with_label ("xfce_dialog_confirm_close_tabs");
315 gtk_grid_attach (GTK_GRID (grid), button, 0, 6, 1, 1);
316 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_dialog_confirm_close_tabs), NULL);
317
318 /* Online Help Dialogs */
319 label = gtk_label_new ("Online Help Dialogs");
320 gtk_grid_attach (GTK_GRID (grid), label, 1, 0, 1, 1);
321
322 /* xfce_dialog_show_help */
323 button = gtk_button_new_with_label ("xfce_dialog_show_help");
324 gtk_grid_attach (GTK_GRID (grid), button, 1, 1, 1, 1);
325 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_dialog_show_help), NULL);
326
327 /* xfce_dialog_show_help_with_version */
328 button = gtk_button_new_with_label ("xfce_dialog_show_help_with_version");
329 gtk_grid_attach (GTK_GRID (grid), button, 1, 2, 1, 1);
330 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_dialog_show_help_with_version), NULL);
331
332 /* remove auto-online check from rc file */
333 button = gtk_button_new_with_label ("remove auto-online check from rc file");
334 gtk_grid_attach (GTK_GRID (grid), button, 1, 3, 1, 1);
335 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (remove_auto_online), NULL);
336
337 /* Xfce Titled Dialogs */
338 label = gtk_label_new ("Xfce Titled Dialog");
339 gtk_grid_attach (GTK_GRID (grid), label, 2, 0, 1, 1);
340
341 /* xfce_titled_dialog_new_with_buttons */
342 button = gtk_button_new_with_label ("xfce_titled_dialog_new_with_buttons");
343 gtk_grid_attach (GTK_GRID (grid), button, 2, 1, 1, 1);
344 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_titled_dialog_new_with_buttons), NULL);
345
346 /* xfce_titled_dialog_new_with_mixed_buttons */
347 button = gtk_button_new_with_label ("xfce_titled_dialog_new_with_mixed_buttons");
348 gtk_grid_attach (GTK_GRID (grid), button, 2, 2, 1, 1);
349 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_titled_dialog_new_with_mixed_buttons), NULL);
350
351 /* Other Dialogs */
352 label = gtk_label_new ("Other Dialogs and Widgets");
353 gtk_grid_attach (GTK_GRID (grid), label, 3, 0, 1, 1);
354
355 /* xfce_gdk_screen_get_active */
356 button = gtk_button_new_with_label ("xfce_gdk_screen_get_active");
357 gtk_grid_attach (GTK_GRID (grid), button, 3, 1, 1, 1);
358 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_gdk_screen_get_active), NULL);
359
360 /* xfce_filename_input */
361 button = gtk_button_new_with_label ("XfceFilenameInput");
362 gtk_grid_attach (GTK_GRID (grid), button, 3, 2, 1, 1);
363 g_signal_connect (G_OBJECT (button), "clicked", G_CALLBACK (show_xfce_filename_input_dialog), NULL);
364
365 gtk_widget_show_all (window);
366 }
367
368
369
370 gint
main(gint argc,gchar ** argv)371 main (gint argc,
372 gchar **argv)
373 {
374 gint exit_code = EXIT_SUCCESS;
375
376 /* Initialize GTK+ */
377 gtk_init (&argc, &argv);
378
379 /* create the main window */
380 create_main_window ();
381
382 /* Enter main loop */
383 gtk_main ();
384
385 return exit_code;
386 }
387