Sven Neumann <sven@xxxxxxxx> writes: > or (and I'd prefer that), we pass these settings to the plug-in in the > GPConfig message. This is a message that is sent to each plug-in when > it is started. We handle this in libgimp and allow the plug-in to > access the settings using a simple API. See for example > gimp_show_tool_tips() or gimp_display_name(). > > Using the config message is definitely the prefered way of doing this > but unfortunately we are completely braindead and didn't add any > padding to the GPConfig struct :( However, there's still hope but > things are becoming ugly now. Readers with a weak stomach, please > leave now... > > The GPConfig struct contains an unused member which is "gamma". This > is a double and IIRC a double is guaranteed to be always 8 bytes. So > we could remove "gamma" and replace it with two 32bit integers and use > those for the transparency settings. We could even squeeze the > transparency settings into less than 8 bytes and keep the remaining > bytes for future use. Might become useful pretty soon, for example as > a way to pass whether color management should be enabled or disabled. > > Can anyone think of better ways to do this? Are there any strong > objections against the ugly hack I outlined above? Did I overlook > something (like for example platforms where a gdouble is not 8 bytes)? When looking at the struct: struct _GPConfig { guint32 version; guint32 tile_width; guint32 tile_height; gint32 shm_ID; gdouble gamma; gint8 install_cmap; gint8 show_tool_tips; gint32 min_colors; gint32 gdisp_ID; gchar *app_name; gchar *wm_class; gchar *display_name; gint32 monitor_number; }; I see two options: - using the place "gdouble gamma" uses. - using the two unused bytes after "gint8 show_tool_tips". I'd suggest we do both and change the struct to: struct _GPConfig { guint32 version; guint32 tile_width; guint32 tile_height; gint32 shm_ID; gint8 gimp_reserved_1; gint8 gimp_reserved_2; gint8 gimp_reserved_3; gint8 gimp_reserved_4; gint8 gimp_reserved_5; gint8 gimp_reserved_6; gint8 gimp_reserved_7; gint8 gimp_reserved_8; gint8 install_cmap; gint8 show_tool_tips; gint8 gimp_reserved_9; gint8 gimp_reserved_10; gint32 min_colors; gint32 gdisp_ID; gchar *app_name; gchar *wm_class; gchar *display_name; gint32 monitor_number; }; Which should be binary compatible on all platforms. ciao, --mitch