Revision: 2977 http://geany.svn.sourceforge.net/geany/?rev=2977&view=rev Author: ntrel Date: 2008-09-19 17:19:34 +0000 (Fri, 19 Sep 2008)
Log Message: ----------- Add GeanyFiletypePrivate instead of using inheritance for non-public fields (this was unnecessary and meant using ugly casts).
Modified Paths: -------------- trunk/ChangeLog trunk/src/filetypes.c trunk/src/filetypes.h
Modified: trunk/ChangeLog =================================================================== --- trunk/ChangeLog 2008-09-19 16:45:07 UTC (rev 2976) +++ trunk/ChangeLog 2008-09-19 17:19:34 UTC (rev 2977) @@ -5,6 +5,9 @@ distracting as added/removed lines don't get them. * src/plugindata.h: Remove 2 unnecessary deprecated macros. + * src/filetypes.c, src/filetypes.h: + Add GeanyFiletypePrivate instead of using inheritance for non-public + fields (this was unnecessary and meant using ugly casts).
2008-09-18 Enrico Tröger <enrico(dot)troeger(at)uvena(dot)de>
Modified: trunk/src/filetypes.c =================================================================== --- trunk/src/filetypes.c 2008-09-19 16:45:07 UTC (rev 2976) +++ trunk/src/filetypes.c 2008-09-19 17:19:34 UTC (rev 2977) @@ -42,15 +42,13 @@ #include "ui_utils.h"
-/* This type 'inherits' from filetype so FullFileType* can be cast to filetype*. */ -typedef struct FullFileType +/* Private GeanyFiletype fields */ +typedef struct GeanyFiletypePrivate { - GeanyFiletype public; - /* Private fields */ GtkWidget *menu_item; /* holds a pointer to the menu item for this filetype */ gboolean keyfile_loaded; } -FullFileType; +GeanyFiletypePrivate;
GPtrArray *filetypes_array = NULL; /* Dynamic array of filetype pointers */ @@ -476,12 +474,13 @@ /* initialize fields. */ static GeanyFiletype *filetype_new(void) { - FullFileType *fft = g_new0(FullFileType, 1); - GeanyFiletype *ft = (GeanyFiletype*) fft; + GeanyFiletype *ft = g_new0(GeanyFiletype, 1);
ft->lang = -2; /* assume no tagmanager parser */ ft->programs = g_new0(struct build_programs, 1); ft->actions = g_new0(struct build_actions, 1); + + ft->priv = g_new0(GeanyFiletypePrivate, 1); return ft; }
@@ -788,16 +787,13 @@
void filetypes_select_radio_item(const GeanyFiletype *ft) { - FullFileType *fft; - /* ignore_callback has to be set by the caller */ g_return_if_fail(ignore_callback);
if (ft == NULL) ft = filetypes[GEANY_FILETYPES_NONE];
- fft = (FullFileType*)ft; - gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(fft->menu_item), TRUE); + gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(ft->priv->menu_item), TRUE); }
@@ -817,11 +813,10 @@ { static GSList *group = NULL; GtkWidget *tmp; - FullFileType *fft = (FullFileType*)ftype;
tmp = gtk_radio_menu_item_new_with_label(group, label); group = gtk_radio_menu_item_get_group(GTK_RADIO_MENU_ITEM(tmp)); - fft->menu_item = tmp; + ftype->priv->menu_item = tmp; gtk_widget_show(tmp); gtk_container_add(GTK_CONTAINER(menu), tmp); g_signal_connect(tmp, "activate", G_CALLBACK(on_filetype_change), (gpointer) ftype); @@ -984,18 +979,20 @@ void filetypes_load_config(gint ft_id, gboolean reload) { GKeyFile *config, *config_home; - FullFileType *fft = (FullFileType*)filetypes[ft_id]; + GeanyFiletypePrivate *pft;
g_return_if_fail(ft_id >= 0 && ft_id < (gint) filetypes_array->len);
+ pft = filetypes[ft_id]->priv; + /* when reloading, proceed only if the settings were already loaded */ - if (reload && ! fft->keyfile_loaded) + if (reload && ! pft->keyfile_loaded) return;
/* when not reloading, load the settings only once */ - if (! reload && fft->keyfile_loaded) + if (! reload && pft->keyfile_loaded) return; - fft->keyfile_loaded = TRUE; + pft->keyfile_loaded = TRUE;
config = g_key_file_new(); config_home = g_key_file_new();
Modified: trunk/src/filetypes.h =================================================================== --- trunk/src/filetypes.h 2008-09-19 16:45:07 UTC (rev 2976) +++ trunk/src/filetypes.h 2008-09-19 17:19:34 UTC (rev 2977) @@ -132,6 +132,8 @@ struct build_programs *programs; struct build_actions *actions; GeanyFiletypeGroupID group; + + struct GeanyFiletypePrivate *priv; /* must be last, append fields before this item */ };
extern GPtrArray *filetypes_array;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.