gconfcallback1.pp 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. program gconfcallback1;
  2. {$Mode ObjFPC}
  3. Uses glib, gtk, gconf, gconfclient;
  4. Procedure key_changed_callback(client : PGConfClient;
  5. cnxn_id : guint;
  6. entry : PGConfEntry;
  7. user_data: gpointer); cdecl;
  8. var
  9. thelabel : PGtkWidget;
  10. thevalue : PGConfValue;
  11. begin
  12. thelabel := GTK_WIDGET(user_data);
  13. if (entry = nil) then
  14. gtk_label_set_text(GTK_LABEL(thelabel), '<unset>')
  15. else begin
  16. theValue := gconf_entry_get_value (entry);
  17. if (thevalue^.thetype = GCONF_VALUE_STRING) then
  18. gtk_label_set_text(GTK_LABEL(thelabel), gconf_value_get_string(thevalue))
  19. else
  20. gtk_label_set_text(GTK_LABEL(thelabel), '<wrong type>');
  21. end;
  22. end;
  23. var
  24. window : PGtkWidget;
  25. thelabel : PGtkWidget;
  26. client : PGConfClient;
  27. str : Pgchar;
  28. begin
  29. gtk_init(@argc, @argv);
  30. gconf_init(argc, argv, nil);
  31. client := gconf_client_get_default;
  32. window := gtk_window_new(GTK_WINDOW_TOPLEVEL);
  33. gtk_signal_connect(PGtkOBJECT (window), 'delete_event',
  34. gtk_SIGNAL_FUNC (@gtk_exit), NIL);
  35. str := gconf_client_get_string(client, '/extra/test/directory/key',nil);
  36. If Str <> nil then
  37. thelabel := gtk_label_new(str)
  38. else
  39. thelabel := gtk_label_new('<unset>');
  40. gtk_container_add(GTK_CONTAINER(window), thelabel);
  41. gconf_client_add_dir(client,
  42. '/extra/test/directory',
  43. GCONF_CLIENT_PRELOAD_NONE,
  44. nil);
  45. gconf_client_notify_add(client, '/extra/test/directory/key',
  46. @key_changed_callback,
  47. thelabel,
  48. nil, nil);
  49. gtk_widget_show_all(window);
  50. gtk_main();
  51. end.