GimpContext * gimp_pdb_context_new (Gimp *gimp, GimpContext *parent, gboolean set_parent) { GimpContext *context; g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); g_return_val_if_fail (GIMP_IS_CONTEXT (parent), NULL); context = g_object_new (GIMP_TYPE_PDB_CONTEXT, "gimp", gimp, "name", "PDB Context", NULL); gimp_config_sync (G_OBJECT (parent), G_OBJECT (context), 0); if (set_parent) { gimp_context_define_properties (context, GIMP_CONTEXT_ALL_PROPS_MASK, FALSE); gimp_context_set_parent (context, parent); } return context; }
static void gimp_device_info_constructed (GObject *object) { GimpDeviceInfo *info = GIMP_DEVICE_INFO (object); Gimp *gimp; G_OBJECT_CLASS (parent_class)->constructed (object); g_assert ((info->device == NULL && info->display == NULL) || (GDK_IS_DEVICE (info->device) && GDK_IS_DISPLAY (info->display))); gimp = GIMP_CONTEXT (object)->gimp; if (info->device) { g_object_set_data (G_OBJECT (info->device), GIMP_DEVICE_INFO_DATA_KEY, info); gimp_object_set_name (GIMP_OBJECT (info), info->device->name); info->mode = info->device->mode; info->n_axes = info->device->num_axes; info->n_keys = info->device->num_keys; } gimp_context_define_properties (GIMP_CONTEXT (object), GIMP_DEVICE_INFO_CONTEXT_MASK, FALSE); gimp_context_copy_properties (gimp_get_user_context (gimp), GIMP_CONTEXT (object), GIMP_DEVICE_INFO_CONTEXT_MASK); gimp_context_set_serialize_properties (GIMP_CONTEXT (object), GIMP_DEVICE_INFO_CONTEXT_MASK); /* FIXME: this is ugly and needs to be done via "notify" once * the contexts' properties are dynamic. */ g_signal_connect (object, "foreground-changed", G_CALLBACK (gimp_device_info_changed), NULL); g_signal_connect (object, "background-changed", G_CALLBACK (gimp_device_info_changed), NULL); g_signal_connect (object, "tool-changed", G_CALLBACK (gimp_device_info_changed), NULL); g_signal_connect (object, "brush-changed", G_CALLBACK (gimp_device_info_changed), NULL); g_signal_connect (object, "pattern-changed", G_CALLBACK (gimp_device_info_changed), NULL); g_signal_connect (object, "gradient-changed", G_CALLBACK (gimp_device_info_changed), NULL); }
GimpContext * gimp_pdb_context_new (Gimp *gimp, GimpContext *parent, gboolean set_parent) { GimpPDBContext *context; GList *list; g_return_val_if_fail (GIMP_IS_GIMP (gimp), NULL); g_return_val_if_fail (GIMP_IS_CONTEXT (parent), NULL); context = g_object_new (GIMP_TYPE_PDB_CONTEXT, "gimp", gimp, "name", "PDB Context", NULL); gimp_config_sync (G_OBJECT (parent), G_OBJECT (context), 0); if (set_parent) { gimp_context_define_properties (GIMP_CONTEXT (context), GIMP_CONTEXT_ALL_PROPS_MASK, FALSE); gimp_context_set_parent (GIMP_CONTEXT (context), parent); for (list = gimp_get_paint_info_iter (gimp); list; list = g_list_next (list)) { GimpPaintInfo *info = list->data; gimp_container_add (context->paint_options_list, GIMP_OBJECT (info->paint_options)); } } else { for (list = GIMP_LIST (GIMP_PDB_CONTEXT (parent)->paint_options_list)->list; list; list = g_list_next (list)) { GimpPaintOptions *options = gimp_config_duplicate (list->data); gimp_container_add (context->paint_options_list, GIMP_OBJECT (options)); g_object_unref (options); } } return GIMP_CONTEXT (context); }