| File: | tests/testfilechooser.c |
| Warning: | line 202, column 12 File position of the stream might be 'indeterminate' after a failed operation. Can cause undefined behavior |
Press '?' to see keyboard shortcuts
Keyboard shortcuts:
| 1 | /* testfilechooser.c | |||
| 2 | * Copyright (C) 2003 Red Hat, Inc. | |||
| 3 | * Author: Owen Taylor | |||
| 4 | * | |||
| 5 | * This library is free software; you can redistribute it and/or | |||
| 6 | * modify it under the terms of the GNU Library General Public | |||
| 7 | * License as published by the Free Software Foundation; either | |||
| 8 | * version 2 of the License, or (at your option) any later version. | |||
| 9 | * | |||
| 10 | * This library is distributed in the hope that it will be useful, | |||
| 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |||
| 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |||
| 13 | * Library General Public License for more details. | |||
| 14 | * | |||
| 15 | * You should have received a copy of the GNU Library General Public | |||
| 16 | * License along with this library. If not, see <http://www.gnu.org/licenses/>. | |||
| 17 | */ | |||
| 18 | #include "config.h" | |||
| 19 | ||||
| 20 | #include <string.h> | |||
| 21 | #include <sys/types.h> | |||
| 22 | #include <sys/stat.h> | |||
| 23 | #include <stdlib.h> | |||
| 24 | #include <time.h> | |||
| 25 | #ifdef HAVE_UNISTD_H1 | |||
| 26 | #include <unistd.h> | |||
| 27 | #endif | |||
| 28 | #include <ctk/ctk.h> | |||
| 29 | ||||
| 30 | #ifdef G_OS_WIN32 | |||
| 31 | # include <io.h> | |||
| 32 | # define localtime_r(t,b) *(b) = *localtime (t) | |||
| 33 | # ifndef S_ISREG | |||
| 34 | # define S_ISREG(m)((((m)) & 0170000) == (0100000)) ((m) & _S_IFREG) | |||
| 35 | # endif | |||
| 36 | #endif | |||
| 37 | ||||
| 38 | #if 0 | |||
| 39 | static CtkWidget *preview_label; | |||
| 40 | static CtkWidget *preview_image; | |||
| 41 | #endif | |||
| 42 | static CtkFileChooserAction action; | |||
| 43 | ||||
| 44 | static void | |||
| 45 | print_current_folder (CtkFileChooser *chooser) | |||
| 46 | { | |||
| 47 | gchar *uri; | |||
| 48 | ||||
| 49 | uri = ctk_file_chooser_get_current_folder_uri (chooser); | |||
| 50 | g_print ("Current folder changed :\n %s\n", uri ? uri : "(null)"); | |||
| 51 | g_free (uri); | |||
| 52 | } | |||
| 53 | ||||
| 54 | static void | |||
| 55 | print_selected (CtkFileChooser *chooser) | |||
| 56 | { | |||
| 57 | GSList *uris = ctk_file_chooser_get_uris (chooser); | |||
| 58 | GSList *tmp_list; | |||
| 59 | ||||
| 60 | g_print ("Selection changed :\n"); | |||
| 61 | for (tmp_list = uris; tmp_list; tmp_list = tmp_list->next) | |||
| 62 | { | |||
| 63 | gchar *uri = tmp_list->data; | |||
| 64 | g_print (" %s\n", uri); | |||
| 65 | g_free (uri); | |||
| 66 | } | |||
| 67 | g_print ("\n"); | |||
| 68 | g_slist_free (uris); | |||
| 69 | } | |||
| 70 | ||||
| 71 | static void | |||
| 72 | response_cb (CtkDialog *dialog, | |||
| 73 | gint response_id) | |||
| 74 | { | |||
| 75 | if (response_id == CTK_RESPONSE_OK) | |||
| 76 | { | |||
| 77 | GSList *list; | |||
| 78 | ||||
| 79 | list = ctk_file_chooser_get_uris (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ()))))))); | |||
| 80 | ||||
| 81 | if (list) | |||
| 82 | { | |||
| 83 | GSList *l; | |||
| 84 | ||||
| 85 | g_print ("Selected files:\n"); | |||
| 86 | ||||
| 87 | for (l = list; l; l = l->next) | |||
| 88 | { | |||
| 89 | g_print ("%s\n", (char *) l->data); | |||
| 90 | g_free (l->data); | |||
| 91 | } | |||
| 92 | ||||
| 93 | g_slist_free (list); | |||
| 94 | } | |||
| 95 | else | |||
| 96 | g_print ("No selected files\n"); | |||
| 97 | } | |||
| 98 | else | |||
| 99 | g_print ("Dialog was closed\n"); | |||
| 100 | ||||
| 101 | ctk_main_quit (); | |||
| 102 | } | |||
| 103 | ||||
| 104 | static gboolean | |||
| 105 | no_backup_files_filter (const CtkFileFilterInfo *filter_info, | |||
| 106 | gpointer data G_GNUC_UNUSED__attribute__ ((__unused__))) | |||
| 107 | { | |||
| 108 | gsize len = filter_info->display_name ? strlen (filter_info->display_name) : 0; | |||
| 109 | if (len > 0 && filter_info->display_name[len - 1] == '~') | |||
| 110 | return 0; | |||
| 111 | else | |||
| 112 | return 1; | |||
| 113 | } | |||
| 114 | ||||
| 115 | static void | |||
| 116 | filter_changed (CtkFileChooserDialog *dialog G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 117 | gpointer data G_GNUC_UNUSED__attribute__ ((__unused__))) | |||
| 118 | { | |||
| 119 | g_print ("file filter changed\n"); | |||
| 120 | } | |||
| 121 | ||||
| 122 | #include <stdio.h> | |||
| 123 | #include <errno(*__errno_location ()).h> | |||
| 124 | #define _(s)(s) (s) | |||
| 125 | ||||
| 126 | static void | |||
| 127 | size_prepared_cb (GdkPixbufLoader *loader, | |||
| 128 | int width, | |||
| 129 | int height, | |||
| 130 | int *data) | |||
| 131 | { | |||
| 132 | int des_width = data[0]; | |||
| 133 | int des_height = data[1]; | |||
| 134 | ||||
| 135 | if (des_height >= height && des_width >= width) { | |||
| 136 | /* Nothing */ | |||
| 137 | } else if ((double)height * des_width > (double)width * des_height) { | |||
| 138 | width = 0.5 + (double)width * des_height / (double)height; | |||
| 139 | height = des_height; | |||
| 140 | } else { | |||
| 141 | height = 0.5 + (double)height * des_width / (double)width; | |||
| 142 | width = des_width; | |||
| 143 | } | |||
| 144 | ||||
| 145 | gdk_pixbuf_loader_set_size (loader, width, height); | |||
| 146 | } | |||
| 147 | ||||
| 148 | GdkPixbuf * | |||
| 149 | my_new_from_file_at_size (const char *filename, | |||
| 150 | int width, | |||
| 151 | int height, | |||
| 152 | GError **error) | |||
| 153 | { | |||
| 154 | GdkPixbufLoader *loader; | |||
| 155 | GdkPixbuf *pixbuf; | |||
| 156 | int info[2]; | |||
| 157 | struct stat st; | |||
| 158 | ||||
| 159 | guchar buffer [4096]; | |||
| 160 | int length; | |||
| 161 | FILE *f; | |||
| 162 | ||||
| 163 | g_return_val_if_fail (filename != NULL, NULL)do { if ((filename != ((void*)0))) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "filename != NULL" ); return (((void*)0)); } } while (0); | |||
| ||||
| 164 | g_return_val_if_fail (width > 0 && height > 0, NULL)do { if ((width > 0 && height > 0)) { } else { g_return_if_fail_warning (((gchar*) 0), ((const char*) (__func__)), "width > 0 && height > 0" ); return (((void*)0)); } } while (0); | |||
| 165 | ||||
| 166 | if (stat (filename, &st) != 0) { | |||
| 167 | int errsv = errno(*__errno_location ()); | |||
| 168 | ||||
| 169 | g_set_error (error, | |||
| 170 | G_FILE_ERRORg_file_error_quark (), | |||
| 171 | g_file_error_from_errno (errsv), | |||
| 172 | _("Could not get information for file '%s': %s")("Could not get information for file '%s': %s"), | |||
| 173 | filename, g_strerror (errsv)); | |||
| 174 | return NULL((void*)0); | |||
| 175 | } | |||
| 176 | ||||
| 177 | if (!S_ISREG (st.st_mode)((((st.st_mode)) & 0170000) == (0100000))) | |||
| 178 | return NULL((void*)0); | |||
| 179 | ||||
| 180 | f = fopen (filename, "rb"); | |||
| 181 | if (!f
| |||
| 182 | int errsv = errno(*__errno_location ()); | |||
| 183 | ||||
| 184 | g_set_error (error, | |||
| 185 | G_FILE_ERRORg_file_error_quark (), | |||
| 186 | g_file_error_from_errno (errsv), | |||
| 187 | _("Failed to open file '%s': %s")("Failed to open file '%s': %s"), | |||
| 188 | filename, g_strerror (errsv)); | |||
| 189 | return NULL((void*)0); | |||
| 190 | } | |||
| 191 | ||||
| 192 | loader = gdk_pixbuf_loader_new (); | |||
| 193 | #ifdef DONT_PRESERVE_ASPECT | |||
| 194 | gdk_pixbuf_loader_set_size (loader, width, height); | |||
| 195 | #else | |||
| 196 | info[0] = width; | |||
| 197 | info[1] = height; | |||
| 198 | g_signal_connect (loader, "size-prepared", G_CALLBACK (size_prepared_cb), info)g_signal_connect_data ((loader), ("size-prepared"), (((GCallback ) (size_prepared_cb))), (info), ((void*)0), (GConnectFlags) 0 ); | |||
| 199 | #endif | |||
| 200 | ||||
| 201 | while (!feof (f)) { | |||
| 202 | length = fread (buffer, 1, sizeof (buffer), f); | |||
| ||||
| 203 | if (length > 0) | |||
| 204 | if (!gdk_pixbuf_loader_write (loader, buffer, length, error)) { | |||
| 205 | gdk_pixbuf_loader_close (loader, NULL((void*)0)); | |||
| 206 | fclose (f); | |||
| 207 | g_object_unref (loader); | |||
| 208 | return NULL((void*)0); | |||
| 209 | } | |||
| 210 | } | |||
| 211 | ||||
| 212 | fclose (f); | |||
| 213 | ||||
| 214 | g_assert (*error == NULL)do { if (*error == ((void*)0)) ; else g_assertion_message_expr (((gchar*) 0), "testfilechooser.c", 214, ((const char*) (__func__ )), "*error == NULL"); } while (0); | |||
| 215 | if (!gdk_pixbuf_loader_close (loader, error)) { | |||
| 216 | g_object_unref (loader); | |||
| 217 | return NULL((void*)0); | |||
| 218 | } | |||
| 219 | ||||
| 220 | pixbuf = gdk_pixbuf_loader_get_pixbuf (loader); | |||
| 221 | ||||
| 222 | if (!pixbuf) { | |||
| 223 | g_object_unref (loader); | |||
| 224 | ||||
| 225 | /* did the loader set an error? */ | |||
| 226 | if (*error != NULL((void*)0)) | |||
| 227 | return NULL((void*)0); | |||
| 228 | ||||
| 229 | g_set_error (error, | |||
| 230 | GDK_PIXBUF_ERRORgdk_pixbuf_error_quark (), | |||
| 231 | GDK_PIXBUF_ERROR_FAILED, | |||
| 232 | _("Failed to load image '%s': reason not known, probably a corrupt image file")("Failed to load image '%s': reason not known, probably a corrupt image file" ), | |||
| 233 | filename); | |||
| 234 | return NULL((void*)0); | |||
| 235 | } | |||
| 236 | ||||
| 237 | g_object_ref (pixbuf)((__typeof__ (pixbuf)) (g_object_ref) (pixbuf)); | |||
| 238 | ||||
| 239 | g_object_unref (loader); | |||
| 240 | ||||
| 241 | return pixbuf; | |||
| 242 | } | |||
| 243 | ||||
| 244 | #if 0 | |||
| 245 | static char * | |||
| 246 | format_time (time_t t) | |||
| 247 | { | |||
| 248 | gchar buf[128]; | |||
| 249 | struct tm tm_buf; | |||
| 250 | time_t now = time (NULL((void*)0)); | |||
| 251 | const char *format; | |||
| 252 | ||||
| 253 | if (abs (now - t) < 24*60*60) | |||
| 254 | format = "%X"; | |||
| 255 | else | |||
| 256 | format = "%x"; | |||
| 257 | ||||
| 258 | localtime_r (&t, &tm_buf); | |||
| 259 | if (strftime (buf, sizeof (buf), format, &tm_buf) == 0) | |||
| 260 | return g_strdup ("<unknown>")g_strdup_inline ("<unknown>"); | |||
| 261 | else | |||
| 262 | return g_strdup (buf)g_strdup_inline (buf); | |||
| 263 | } | |||
| 264 | ||||
| 265 | static char * | |||
| 266 | format_size (gint64 size) | |||
| 267 | { | |||
| 268 | if (size < (gint64)1024) | |||
| 269 | return g_strdup_printf ("%d bytes", (gint)size); | |||
| 270 | else if (size < (gint64)1024*1024) | |||
| 271 | return g_strdup_printf ("%.1f K", size / (1024.)); | |||
| 272 | else if (size < (gint64)1024*1024*1024) | |||
| 273 | return g_strdup_printf ("%.1f M", size / (1024.*1024.)); | |||
| 274 | else | |||
| 275 | return g_strdup_printf ("%.1f G", size / (1024.*1024.*1024.)); | |||
| 276 | } | |||
| 277 | ||||
| 278 | static void | |||
| 279 | update_preview_cb (CtkFileChooser *chooser) | |||
| 280 | { | |||
| 281 | gchar *filename = ctk_file_chooser_get_preview_filename (chooser); | |||
| 282 | gboolean have_preview = FALSE(0); | |||
| 283 | ||||
| 284 | if (filename) | |||
| 285 | { | |||
| 286 | GdkPixbuf *pixbuf; | |||
| 287 | GError *error = NULL((void*)0); | |||
| 288 | ||||
| 289 | pixbuf = my_new_from_file_at_size (filename, 128, 128, &error); | |||
| 290 | if (pixbuf) | |||
| 291 | { | |||
| 292 | ctk_image_set_from_pixbuf (CTK_IMAGE (preview_image)((((CtkImage*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((preview_image)), ((ctk_image_get_type ())))))), pixbuf); | |||
| 293 | g_object_unref (pixbuf); | |||
| 294 | ctk_widget_show (preview_image); | |||
| 295 | ctk_widget_hide (preview_label); | |||
| 296 | have_preview = TRUE(!(0)); | |||
| 297 | } | |||
| 298 | else | |||
| 299 | { | |||
| 300 | struct stat buf; | |||
| 301 | if (stat (filename, &buf) == 0) | |||
| 302 | { | |||
| 303 | gchar *preview_text; | |||
| 304 | gchar *size_str; | |||
| 305 | gchar *modified_time; | |||
| 306 | ||||
| 307 | size_str = format_size (buf.st_size); | |||
| 308 | modified_time = format_time (buf.st_mtimest_mtim.tv_sec); | |||
| 309 | ||||
| 310 | preview_text = g_strdup_printf ("<i>Modified:</i>\t%s\n" | |||
| 311 | "<i>Size:</i>\t%s\n", | |||
| 312 | modified_time, | |||
| 313 | size_str); | |||
| 314 | ctk_label_set_markup (CTK_LABEL (preview_label)((((CtkLabel*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((preview_label)), ((ctk_label_get_type ())))))), preview_text); | |||
| 315 | g_free (modified_time); | |||
| 316 | g_free (size_str); | |||
| 317 | g_free (preview_text); | |||
| 318 | ||||
| 319 | ctk_widget_hide (preview_image); | |||
| 320 | ctk_widget_show (preview_label); | |||
| 321 | have_preview = TRUE(!(0)); | |||
| 322 | } | |||
| 323 | } | |||
| 324 | ||||
| 325 | g_free (filename); | |||
| 326 | ||||
| 327 | if (error) | |||
| 328 | g_error_free (error); | |||
| 329 | } | |||
| 330 | ||||
| 331 | ctk_file_chooser_set_preview_widget_active (chooser, have_preview); | |||
| 332 | } | |||
| 333 | #endif | |||
| 334 | ||||
| 335 | static void | |||
| 336 | set_current_folder (CtkFileChooser *chooser, | |||
| 337 | const char *name) | |||
| 338 | { | |||
| 339 | if (!ctk_file_chooser_set_current_folder (chooser, name)) | |||
| 340 | { | |||
| 341 | CtkWidget *dialog; | |||
| 342 | ||||
| 343 | dialog = ctk_message_dialog_new (CTK_WINDOW (chooser)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((chooser)), ((ctk_window_get_type ())))))), | |||
| 344 | CTK_DIALOG_MODAL | CTK_DIALOG_DESTROY_WITH_PARENT, | |||
| 345 | CTK_MESSAGE_ERROR, | |||
| 346 | CTK_BUTTONS_CLOSE, | |||
| 347 | "Could not set the folder to %s", | |||
| 348 | name); | |||
| 349 | ctk_dialog_run (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ()))))))); | |||
| 350 | ctk_widget_destroy (dialog); | |||
| 351 | } | |||
| 352 | } | |||
| 353 | ||||
| 354 | static void | |||
| 355 | set_folder_nonexistent_cb (CtkButton *button G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 356 | CtkFileChooser *chooser) | |||
| 357 | { | |||
| 358 | set_current_folder (chooser, "/nonexistent"); | |||
| 359 | } | |||
| 360 | ||||
| 361 | static void | |||
| 362 | set_folder_existing_nonexistent_cb (CtkButton *button G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 363 | CtkFileChooser *chooser) | |||
| 364 | { | |||
| 365 | set_current_folder (chooser, "/usr/nonexistent"); | |||
| 366 | } | |||
| 367 | ||||
| 368 | static void | |||
| 369 | set_filename (CtkFileChooser *chooser, | |||
| 370 | const char *name) | |||
| 371 | { | |||
| 372 | if (!ctk_file_chooser_set_filename (chooser, name)) | |||
| 373 | { | |||
| 374 | CtkWidget *dialog; | |||
| 375 | ||||
| 376 | dialog = ctk_message_dialog_new (CTK_WINDOW (chooser)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((chooser)), ((ctk_window_get_type ())))))), | |||
| 377 | CTK_DIALOG_MODAL | CTK_DIALOG_DESTROY_WITH_PARENT, | |||
| 378 | CTK_MESSAGE_ERROR, | |||
| 379 | CTK_BUTTONS_CLOSE, | |||
| 380 | "Could not select %s", | |||
| 381 | name); | |||
| 382 | ctk_dialog_run (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ()))))))); | |||
| 383 | ctk_widget_destroy (dialog); | |||
| 384 | } | |||
| 385 | } | |||
| 386 | ||||
| 387 | static void | |||
| 388 | set_filename_nonexistent_cb (CtkButton *button G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 389 | CtkFileChooser *chooser) | |||
| 390 | { | |||
| 391 | set_filename (chooser, "/nonexistent"); | |||
| 392 | } | |||
| 393 | ||||
| 394 | static void | |||
| 395 | set_filename_existing_nonexistent_cb (CtkButton *button G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 396 | CtkFileChooser *chooser) | |||
| 397 | { | |||
| 398 | set_filename (chooser, "/usr/nonexistent"); | |||
| 399 | } | |||
| 400 | ||||
| 401 | static void | |||
| 402 | get_selection_cb (CtkButton *button G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 403 | CtkFileChooser *chooser) | |||
| 404 | { | |||
| 405 | GSList *selection; | |||
| 406 | ||||
| 407 | selection = ctk_file_chooser_get_uris (chooser); | |||
| 408 | ||||
| 409 | g_print ("Selection: "); | |||
| 410 | ||||
| 411 | if (selection == NULL((void*)0)) | |||
| 412 | g_print ("empty\n"); | |||
| 413 | else | |||
| 414 | { | |||
| 415 | GSList *l; | |||
| 416 | ||||
| 417 | for (l = selection; l; l = l->next) | |||
| 418 | { | |||
| 419 | char *uri = l->data; | |||
| 420 | ||||
| 421 | g_print ("%s\n", uri); | |||
| 422 | ||||
| 423 | if (l->next) | |||
| 424 | g_print (" "); | |||
| 425 | } | |||
| 426 | } | |||
| 427 | ||||
| 428 | g_slist_free_full (selection, g_free); | |||
| 429 | } | |||
| 430 | ||||
| 431 | static void | |||
| 432 | get_current_name_cb (CtkButton *button G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 433 | CtkFileChooser *chooser) | |||
| 434 | { | |||
| 435 | char *name; | |||
| 436 | ||||
| 437 | name = ctk_file_chooser_get_current_name (chooser); | |||
| 438 | g_print ("Current name: %s\n", name ? name : "NULL"); | |||
| 439 | g_free (name); | |||
| 440 | } | |||
| 441 | ||||
| 442 | static void | |||
| 443 | unmap_and_remap_cb (CtkButton *button G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 444 | CtkFileChooser *chooser) | |||
| 445 | { | |||
| 446 | ctk_widget_hide (CTK_WIDGET (chooser)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((chooser)), ((ctk_widget_get_type ()))))))); | |||
| 447 | ctk_widget_show (CTK_WIDGET (chooser)((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((chooser)), ((ctk_widget_get_type ()))))))); | |||
| 448 | } | |||
| 449 | ||||
| 450 | static void | |||
| 451 | kill_dependent (CtkWindow *win G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 452 | CtkWidget *dep) | |||
| 453 | { | |||
| 454 | ctk_widget_destroy (dep); | |||
| 455 | g_object_unref (dep); | |||
| 456 | } | |||
| 457 | ||||
| 458 | static void | |||
| 459 | notify_multiple_cb (CtkWidget *dialog, | |||
| 460 | GParamSpec *pspec G_GNUC_UNUSED__attribute__ ((__unused__)), | |||
| 461 | CtkWidget *button) | |||
| 462 | { | |||
| 463 | gboolean multiple; | |||
| 464 | ||||
| 465 | multiple = ctk_file_chooser_get_select_multiple (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ()))))))); | |||
| 466 | ||||
| 467 | ctk_widget_set_sensitive (button, multiple); | |||
| 468 | } | |||
| 469 | ||||
| 470 | static CtkFileChooserConfirmation | |||
| 471 | confirm_overwrite_cb (CtkFileChooser *chooser, | |||
| 472 | gpointer data G_GNUC_UNUSED__attribute__ ((__unused__))) | |||
| 473 | { | |||
| 474 | CtkWidget *dialog; | |||
| 475 | CtkWidget *button; | |||
| 476 | int response; | |||
| 477 | CtkFileChooserConfirmation conf; | |||
| 478 | ||||
| 479 | dialog = ctk_message_dialog_new (CTK_WINDOW (ctk_widget_get_toplevel (CTK_WIDGET (chooser)))((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((ctk_widget_get_toplevel (((((CtkWidget*) (void *) g_type_check_instance_cast ((GTypeInstance*) ((chooser)), ((ctk_widget_get_type ()))))) )))), ((ctk_window_get_type ())))))), | |||
| 480 | CTK_DIALOG_MODAL | CTK_DIALOG_DESTROY_WITH_PARENT, | |||
| 481 | CTK_MESSAGE_QUESTION, | |||
| 482 | CTK_BUTTONS_NONE, | |||
| 483 | "What do you want to do?"); | |||
| 484 | ||||
| 485 | button = ctk_button_new_with_label ("Use the stock confirmation dialog"); | |||
| 486 | ctk_widget_show (button); | |||
| 487 | ctk_dialog_add_action_widget (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ())))))), button, 1); | |||
| 488 | ||||
| 489 | button = ctk_button_new_with_label ("Type a new file name"); | |||
| 490 | ctk_widget_show (button); | |||
| 491 | ctk_dialog_add_action_widget (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ())))))), button, 2); | |||
| 492 | ||||
| 493 | button = ctk_button_new_with_label ("Accept the file name"); | |||
| 494 | ctk_widget_show (button); | |||
| 495 | ctk_dialog_add_action_widget (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ())))))), button, 3); | |||
| 496 | ||||
| 497 | response = ctk_dialog_run (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ()))))))); | |||
| 498 | ||||
| 499 | switch (response) | |||
| 500 | { | |||
| 501 | case 1: | |||
| 502 | conf = CTK_FILE_CHOOSER_CONFIRMATION_CONFIRM; | |||
| 503 | break; | |||
| 504 | ||||
| 505 | case 3: | |||
| 506 | conf = CTK_FILE_CHOOSER_CONFIRMATION_ACCEPT_FILENAME; | |||
| 507 | break; | |||
| 508 | ||||
| 509 | default: | |||
| 510 | conf = CTK_FILE_CHOOSER_CONFIRMATION_SELECT_AGAIN; | |||
| 511 | break; | |||
| 512 | } | |||
| 513 | ||||
| 514 | ctk_widget_destroy (dialog); | |||
| 515 | ||||
| 516 | return conf; | |||
| 517 | } | |||
| 518 | ||||
| 519 | int | |||
| 520 | main (int argc, char **argv) | |||
| 521 | { | |||
| 522 | CtkWidget *control_window; | |||
| 523 | CtkWidget *vbbox; | |||
| 524 | CtkWidget *button; | |||
| 525 | CtkWidget *dialog; | |||
| 526 | CtkWidget *extra; | |||
| 527 | CtkFileFilter *filter; | |||
| 528 | gboolean force_rtl = FALSE(0); | |||
| 529 | gboolean multiple = FALSE(0); | |||
| 530 | gboolean local_only = FALSE(0); | |||
| 531 | char *action_arg = NULL((void*)0); | |||
| 532 | char *initial_filename = NULL((void*)0); | |||
| 533 | char *initial_folder = NULL((void*)0); | |||
| 534 | GError *error = NULL((void*)0); | |||
| 535 | GOptionEntry options[] = { | |||
| 536 | { "action", 'a', 0, G_OPTION_ARG_STRING, &action_arg, "Filechooser action", "ACTION" }, | |||
| 537 | { "multiple", 'm', 0, G_OPTION_ARG_NONE, &multiple, "Select multiple", NULL((void*)0) }, | |||
| 538 | { "local-only", 'l', 0, G_OPTION_ARG_NONE, &local_only, "Local only", NULL((void*)0) }, | |||
| 539 | { "right-to-left", 'r', 0, G_OPTION_ARG_NONE, &force_rtl, "Force right-to-left layout.", NULL((void*)0) }, | |||
| 540 | { "initial-filename", 'f', 0, G_OPTION_ARG_FILENAME, &initial_filename, "Initial filename to select", "FILENAME" }, | |||
| 541 | { "initial-folder", 'F', 0, G_OPTION_ARG_FILENAME, &initial_folder, "Initial folder to show", "FILENAME" }, | |||
| 542 | { NULL((void*)0) } | |||
| 543 | }; | |||
| 544 | ||||
| 545 | if (!ctk_init_with_args (&argc, &argv, "", options, NULL((void*)0), &error)) | |||
| 546 | { | |||
| 547 | g_print ("Failed to parse args: %s\n", error->message); | |||
| 548 | g_error_free (error); | |||
| 549 | return 1; | |||
| 550 | } | |||
| 551 | ||||
| 552 | if (initial_filename && initial_folder) | |||
| 553 | { | |||
| 554 | g_print ("Only one of --initial-filename and --initial-folder may be specified"); | |||
| 555 | return 1; | |||
| 556 | } | |||
| 557 | ||||
| 558 | if (force_rtl) | |||
| 559 | ctk_widget_set_default_direction (CTK_TEXT_DIR_RTL); | |||
| 560 | ||||
| 561 | action = CTK_FILE_CHOOSER_ACTION_OPEN; | |||
| 562 | ||||
| 563 | if (action_arg != NULL((void*)0)) | |||
| 564 | { | |||
| 565 | if (! strcmp ("open", action_arg)) | |||
| 566 | action = CTK_FILE_CHOOSER_ACTION_OPEN; | |||
| 567 | else if (! strcmp ("save", action_arg)) | |||
| 568 | action = CTK_FILE_CHOOSER_ACTION_SAVE; | |||
| 569 | else if (! strcmp ("select_folder", action_arg)) | |||
| 570 | action = CTK_FILE_CHOOSER_ACTION_SELECT_FOLDER; | |||
| 571 | else if (! strcmp ("create_folder", action_arg)) | |||
| 572 | action = CTK_FILE_CHOOSER_ACTION_CREATE_FOLDER; | |||
| 573 | else | |||
| 574 | { | |||
| 575 | g_print ("--action must be one of \"open\", \"save\", \"select_folder\", \"create_folder\"\n"); | |||
| 576 | return 1; | |||
| 577 | } | |||
| 578 | ||||
| 579 | g_free (action_arg); | |||
| 580 | } | |||
| 581 | ||||
| 582 | dialog = g_object_new (CTK_TYPE_FILE_CHOOSER_DIALOG(ctk_file_chooser_dialog_get_type ()), | |||
| 583 | "action", action, | |||
| 584 | "select-multiple", multiple, | |||
| 585 | "local-only", local_only, | |||
| 586 | NULL((void*)0)); | |||
| 587 | ||||
| 588 | switch (action) | |||
| 589 | { | |||
| 590 | case CTK_FILE_CHOOSER_ACTION_OPEN: | |||
| 591 | case CTK_FILE_CHOOSER_ACTION_SELECT_FOLDER: | |||
| 592 | ctk_window_set_title (CTK_WINDOW (dialog)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_window_get_type ())))))), "Select a file"); | |||
| 593 | ctk_dialog_add_buttons (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ())))))), | |||
| 594 | _("_Cancel")("_Cancel"), CTK_RESPONSE_CANCEL, | |||
| 595 | _("_Open")("_Open"), CTK_RESPONSE_OK, | |||
| 596 | NULL((void*)0)); | |||
| 597 | break; | |||
| 598 | case CTK_FILE_CHOOSER_ACTION_SAVE: | |||
| 599 | case CTK_FILE_CHOOSER_ACTION_CREATE_FOLDER: | |||
| 600 | ctk_window_set_title (CTK_WINDOW (dialog)((((CtkWindow*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_window_get_type ())))))), "Save a file"); | |||
| 601 | ctk_dialog_add_buttons (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ())))))), | |||
| 602 | _("_Cancel")("_Cancel"), CTK_RESPONSE_CANCEL, | |||
| 603 | _("_Save")("_Save"), CTK_RESPONSE_OK, | |||
| 604 | NULL((void*)0)); | |||
| 605 | break; | |||
| 606 | } | |||
| 607 | ctk_dialog_set_default_response (CTK_DIALOG (dialog)((((CtkDialog*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_dialog_get_type ())))))), CTK_RESPONSE_OK); | |||
| 608 | ||||
| 609 | g_signal_connect (dialog, "selection-changed",g_signal_connect_data ((dialog), ("selection-changed"), (((GCallback ) (print_selected))), (((void*)0)), ((void*)0), (GConnectFlags ) 0) | |||
| 610 | G_CALLBACK (print_selected), NULL)g_signal_connect_data ((dialog), ("selection-changed"), (((GCallback ) (print_selected))), (((void*)0)), ((void*)0), (GConnectFlags ) 0); | |||
| 611 | g_signal_connect (dialog, "current-folder-changed",g_signal_connect_data ((dialog), ("current-folder-changed"), ( ((GCallback) (print_current_folder))), (((void*)0)), ((void*) 0), (GConnectFlags) 0) | |||
| 612 | G_CALLBACK (print_current_folder), NULL)g_signal_connect_data ((dialog), ("current-folder-changed"), ( ((GCallback) (print_current_folder))), (((void*)0)), ((void*) 0), (GConnectFlags) 0); | |||
| 613 | g_signal_connect (dialog, "response",g_signal_connect_data ((dialog), ("response"), (((GCallback) ( response_cb))), (((void*)0)), ((void*)0), (GConnectFlags) 0) | |||
| 614 | G_CALLBACK (response_cb), NULL)g_signal_connect_data ((dialog), ("response"), (((GCallback) ( response_cb))), (((void*)0)), ((void*)0), (GConnectFlags) 0); | |||
| 615 | g_signal_connect (dialog, "confirm-overwrite",g_signal_connect_data ((dialog), ("confirm-overwrite"), (((GCallback ) (confirm_overwrite_cb))), (((void*)0)), ((void*)0), (GConnectFlags ) 0) | |||
| 616 | G_CALLBACK (confirm_overwrite_cb), NULL)g_signal_connect_data ((dialog), ("confirm-overwrite"), (((GCallback ) (confirm_overwrite_cb))), (((void*)0)), ((void*)0), (GConnectFlags ) 0); | |||
| 617 | ||||
| 618 | /* Filters */ | |||
| 619 | filter = ctk_file_filter_new (); | |||
| 620 | ctk_file_filter_set_name (filter, "All Files"); | |||
| 621 | ctk_file_filter_add_pattern (filter, "*"); | |||
| 622 | ctk_file_chooser_add_filter (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), filter); | |||
| 623 | ||||
| 624 | /* Make this filter the default */ | |||
| 625 | ctk_file_chooser_set_filter (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), filter); | |||
| 626 | ||||
| 627 | filter = ctk_file_filter_new (); | |||
| 628 | ctk_file_filter_set_name (filter, "No backup files"); | |||
| 629 | ctk_file_filter_add_custom (filter, CTK_FILE_FILTER_DISPLAY_NAME, | |||
| 630 | no_backup_files_filter, NULL((void*)0), NULL((void*)0)); | |||
| 631 | ctk_file_filter_add_mime_type (filter, "image/png"); | |||
| 632 | ctk_file_chooser_add_filter (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), filter); | |||
| 633 | ||||
| 634 | filter = ctk_file_filter_new (); | |||
| 635 | ctk_file_filter_set_name (filter, "Starts with D"); | |||
| 636 | ctk_file_filter_add_pattern (filter, "D*"); | |||
| 637 | ctk_file_chooser_add_filter (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), filter); | |||
| 638 | ||||
| 639 | g_signal_connect (dialog, "notify::filter",g_signal_connect_data ((dialog), ("notify::filter"), (((GCallback ) (filter_changed))), (((void*)0)), ((void*)0), (GConnectFlags ) 0) | |||
| 640 | G_CALLBACK (filter_changed), NULL)g_signal_connect_data ((dialog), ("notify::filter"), (((GCallback ) (filter_changed))), (((void*)0)), ((void*)0), (GConnectFlags ) 0); | |||
| 641 | ||||
| 642 | filter = ctk_file_filter_new (); | |||
| 643 | ctk_file_filter_set_name (filter, "PNG and JPEG"); | |||
| 644 | ctk_file_filter_add_mime_type (filter, "image/jpeg"); | |||
| 645 | ctk_file_filter_add_mime_type (filter, "image/png"); | |||
| 646 | ctk_file_chooser_add_filter (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), filter); | |||
| 647 | ||||
| 648 | filter = ctk_file_filter_new (); | |||
| 649 | ctk_file_filter_set_name (filter, "Images"); | |||
| 650 | ctk_file_filter_add_pixbuf_formats (filter); | |||
| 651 | ctk_file_chooser_add_filter (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), filter); | |||
| 652 | ||||
| 653 | #if 0 | |||
| 654 | /* Preview widget */ | |||
| 655 | /* THIS IS A TERRIBLE PREVIEW WIDGET, AND SHOULD NOT BE COPIED AT ALL. | |||
| 656 | */ | |||
| 657 | preview_vbox = ctk_box_new (CTK_ORIENTATION_VERTICAL, 0); | |||
| 658 | ctk_file_chooser_set_preview_widget (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), preview_vbox); | |||
| 659 | ||||
| 660 | preview_label = ctk_label_new (NULL((void*)0)); | |||
| 661 | ctk_box_pack_start (CTK_BOX (preview_vbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((preview_vbox)), ((ctk_box_get_type ())))))), preview_label, TRUE(!(0)), TRUE(!(0)), 0); | |||
| 662 | g_object_set (preview_label, "margin", 6, NULL((void*)0)); | |||
| 663 | ||||
| 664 | preview_image = ctk_image_new (); | |||
| 665 | ctk_box_pack_start (CTK_BOX (preview_vbox)((((CtkBox*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((preview_vbox)), ((ctk_box_get_type ())))))), preview_image, TRUE(!(0)), TRUE(!(0)), 0); | |||
| 666 | g_object_set (preview_image, "margin", 6, NULL((void*)0)); | |||
| 667 | ||||
| 668 | update_preview_cb (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ()))))))); | |||
| 669 | g_signal_connect (dialog, "update-preview",g_signal_connect_data ((dialog), ("update-preview"), (((GCallback ) (update_preview_cb))), (((void*)0)), ((void*)0), (GConnectFlags ) 0) | |||
| 670 | G_CALLBACK (update_preview_cb), NULL)g_signal_connect_data ((dialog), ("update-preview"), (((GCallback ) (update_preview_cb))), (((void*)0)), ((void*)0), (GConnectFlags ) 0); | |||
| 671 | #endif | |||
| 672 | ||||
| 673 | /* Extra widget */ | |||
| 674 | ||||
| 675 | extra = ctk_check_button_new_with_mnemonic ("Lar_t whoever asks about this button"); | |||
| 676 | ctk_toggle_button_set_active (CTK_TOGGLE_BUTTON (extra)((((CtkToggleButton*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((extra)), ((ctk_toggle_button_get_type ())))))), TRUE(!(0))); | |||
| 677 | ctk_file_chooser_set_extra_widget (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), extra); | |||
| 678 | ||||
| 679 | /* Shortcuts */ | |||
| 680 | ||||
| 681 | ctk_file_chooser_add_shortcut_folder_uri (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), | |||
| 682 | "file:///usr/share/pixmaps", | |||
| 683 | NULL((void*)0)); | |||
| 684 | ctk_file_chooser_add_shortcut_folder (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), | |||
| 685 | g_get_user_special_dir (G_USER_DIRECTORY_MUSIC), | |||
| 686 | NULL((void*)0)); | |||
| 687 | ||||
| 688 | /* Initial filename or folder */ | |||
| 689 | ||||
| 690 | if (initial_filename) | |||
| 691 | set_filename (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), initial_filename); | |||
| 692 | ||||
| 693 | if (initial_folder) | |||
| 694 | set_current_folder (CTK_FILE_CHOOSER (dialog)((((CtkFileChooser*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((dialog)), ((ctk_file_chooser_get_type ())))))), initial_folder); | |||
| 695 | ||||
| 696 | /* show_all() to reveal bugs in composite widget handling */ | |||
| 697 | ctk_widget_show_all (dialog); | |||
| 698 | ||||
| 699 | /* Extra controls for manipulating the test environment | |||
| 700 | */ | |||
| 701 | ||||
| 702 | control_window = ctk_window_new (CTK_WINDOW_TOPLEVEL); | |||
| 703 | ||||
| 704 | vbbox = ctk_button_box_new (CTK_ORIENTATION_VERTICAL); | |||
| 705 | ctk_container_add (CTK_CONTAINER (control_window)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((control_window)), ((ctk_container_get_type ())))))), vbbox); | |||
| 706 | ||||
| 707 | button = ctk_button_new_with_mnemonic ("_Select all"); | |||
| 708 | ctk_widget_set_sensitive (button, multiple); | |||
| 709 | ctk_container_add (CTK_CONTAINER (vbbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbbox)), ((ctk_container_get_type ())))))), button); | |||
| 710 | g_signal_connect_swapped (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( ctk_file_chooser_select_all))), (dialog), ((void*)0), G_CONNECT_SWAPPED ) | |||
| 711 | G_CALLBACK (ctk_file_chooser_select_all), dialog)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( ctk_file_chooser_select_all))), (dialog), ((void*)0), G_CONNECT_SWAPPED ); | |||
| 712 | g_signal_connect (dialog, "notify::select-multiple",g_signal_connect_data ((dialog), ("notify::select-multiple"), (((GCallback) (notify_multiple_cb))), (button), ((void*)0), ( GConnectFlags) 0) | |||
| 713 | G_CALLBACK (notify_multiple_cb), button)g_signal_connect_data ((dialog), ("notify::select-multiple"), (((GCallback) (notify_multiple_cb))), (button), ((void*)0), ( GConnectFlags) 0); | |||
| 714 | ||||
| 715 | button = ctk_button_new_with_mnemonic ("_Unselect all"); | |||
| 716 | ctk_container_add (CTK_CONTAINER (vbbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbbox)), ((ctk_container_get_type ())))))), button); | |||
| 717 | g_signal_connect_swapped (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( ctk_file_chooser_unselect_all))), (dialog), ((void*)0), G_CONNECT_SWAPPED ) | |||
| 718 | G_CALLBACK (ctk_file_chooser_unselect_all), dialog)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( ctk_file_chooser_unselect_all))), (dialog), ((void*)0), G_CONNECT_SWAPPED ); | |||
| 719 | ||||
| 720 | button = ctk_button_new_with_label ("set_current_folder (\"/nonexistent\")"); | |||
| 721 | ctk_container_add (CTK_CONTAINER (vbbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbbox)), ((ctk_container_get_type ())))))), button); | |||
| 722 | g_signal_connect (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( set_folder_nonexistent_cb))), (dialog), ((void*)0), (GConnectFlags ) 0) | |||
| 723 | G_CALLBACK (set_folder_nonexistent_cb), dialog)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( set_folder_nonexistent_cb))), (dialog), ((void*)0), (GConnectFlags ) 0); | |||
| 724 | ||||
| 725 | button = ctk_button_new_with_label ("set_current_folder (\"/usr/nonexistent\")"); | |||
| 726 | ctk_container_add (CTK_CONTAINER (vbbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbbox)), ((ctk_container_get_type ())))))), button); | |||
| 727 | g_signal_connect (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( set_folder_existing_nonexistent_cb))), (dialog), ((void*)0), ( GConnectFlags) 0) | |||
| 728 | G_CALLBACK (set_folder_existing_nonexistent_cb), dialog)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( set_folder_existing_nonexistent_cb))), (dialog), ((void*)0), ( GConnectFlags) 0); | |||
| 729 | ||||
| 730 | button = ctk_button_new_with_label ("set_filename (\"/nonexistent\")"); | |||
| 731 | ctk_container_add (CTK_CONTAINER (vbbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbbox)), ((ctk_container_get_type ())))))), button); | |||
| 732 | g_signal_connect (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( set_filename_nonexistent_cb))), (dialog), ((void*)0), (GConnectFlags ) 0) | |||
| 733 | G_CALLBACK (set_filename_nonexistent_cb), dialog)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( set_filename_nonexistent_cb))), (dialog), ((void*)0), (GConnectFlags ) 0); | |||
| 734 | ||||
| 735 | button = ctk_button_new_with_label ("set_filename (\"/usr/nonexistent\")"); | |||
| 736 | ctk_container_add (CTK_CONTAINER (vbbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbbox)), ((ctk_container_get_type ())))))), button); | |||
| 737 | g_signal_connect (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( set_filename_existing_nonexistent_cb))), (dialog), ((void*)0) , (GConnectFlags) 0) | |||
| 738 | G_CALLBACK (set_filename_existing_nonexistent_cb), dialog)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( set_filename_existing_nonexistent_cb))), (dialog), ((void*)0) , (GConnectFlags) 0); | |||
| 739 | ||||
| 740 | button = ctk_button_new_with_label ("Get selection"); | |||
| 741 | ctk_container_add (CTK_CONTAINER (vbbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbbox)), ((ctk_container_get_type ())))))), button); | |||
| 742 | g_signal_connect (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( get_selection_cb))), (dialog), ((void*)0), (GConnectFlags) 0) | |||
| 743 | G_CALLBACK (get_selection_cb), dialog)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( get_selection_cb))), (dialog), ((void*)0), (GConnectFlags) 0); | |||
| 744 | ||||
| 745 | button = ctk_button_new_with_label ("Get current name"); | |||
| 746 | ctk_container_add (CTK_CONTAINER (vbbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbbox)), ((ctk_container_get_type ())))))), button); | |||
| 747 | g_signal_connect (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( get_current_name_cb))), (dialog), ((void*)0), (GConnectFlags) 0) | |||
| 748 | G_CALLBACK (get_current_name_cb), dialog)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( get_current_name_cb))), (dialog), ((void*)0), (GConnectFlags) 0); | |||
| 749 | ||||
| 750 | button = ctk_button_new_with_label ("Unmap and remap"); | |||
| 751 | ctk_container_add (CTK_CONTAINER (vbbox)((((CtkContainer*) (void *) g_type_check_instance_cast ((GTypeInstance *) ((vbbox)), ((ctk_container_get_type ())))))), button); | |||
| 752 | g_signal_connect (button, "clicked",g_signal_connect_data ((button), ("clicked"), (((GCallback) ( unmap_and_remap_cb))), (dialog), ((void*)0), (GConnectFlags) 0 ) | |||
| 753 | G_CALLBACK (unmap_and_remap_cb), dialog)g_signal_connect_data ((button), ("clicked"), (((GCallback) ( unmap_and_remap_cb))), (dialog), ((void*)0), (GConnectFlags) 0 ); | |||
| 754 | ||||
| 755 | ctk_widget_show_all (control_window); | |||
| 756 | ||||
| 757 | g_object_ref (control_window)((__typeof__ (control_window)) (g_object_ref) (control_window )); | |||
| 758 | g_signal_connect (dialog, "destroy",g_signal_connect_data ((dialog), ("destroy"), (((GCallback) ( kill_dependent))), (control_window), ((void*)0), (GConnectFlags ) 0) | |||
| 759 | G_CALLBACK (kill_dependent), control_window)g_signal_connect_data ((dialog), ("destroy"), (((GCallback) ( kill_dependent))), (control_window), ((void*)0), (GConnectFlags ) 0); | |||
| 760 | ||||
| 761 | /* We need to hold a ref until we have destroyed the widgets, just in case | |||
| 762 | * someone else destroys them. We explicitly destroy windows to catch leaks. | |||
| 763 | */ | |||
| 764 | g_object_ref (dialog)((__typeof__ (dialog)) (g_object_ref) (dialog)); | |||
| 765 | ctk_main (); | |||
| 766 | ctk_widget_destroy (dialog); | |||
| 767 | g_object_unref (dialog); | |||
| 768 | ||||
| 769 | return 0; | |||
| 770 | } |