SF.net SVN: geany: [2552] branches/custom-filetypes

ntrel at users.sourceforge.net ntrel at xxxxx
Tue May 6 17:04:07 UTC 2008


Revision: 2552
          http://geany.svn.sourceforge.net/geany/?rev=2552&view=rev
Author:   ntrel
Date:     2008-05-06 10:04:06 -0700 (Tue, 06 May 2008)

Log Message:
-----------
Remove unused filetype::item field.
Create FullFileType private type that 'inherits' from filetype
(FullFileType* can be cast to filetype*). This is used in
filetypes_new() to hide filetype struct fields from the API.
Remove radio_items[] and use FullFileType::menu_item instead.

Modified Paths:
--------------
    branches/custom-filetypes/ChangeLog
    branches/custom-filetypes/src/filetypes.c
    branches/custom-filetypes/src/filetypes.h

Modified: branches/custom-filetypes/ChangeLog
===================================================================
--- branches/custom-filetypes/ChangeLog	2008-05-06 12:43:21 UTC (rev 2551)
+++ branches/custom-filetypes/ChangeLog	2008-05-06 17:04:06 UTC (rev 2552)
@@ -1,3 +1,13 @@
+2008-05-06  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
+
+ * src/filetypes.c, src/filetypes.h:
+   Remove unused filetype::item field.
+   Create FullFileType private type that 'inherits' from filetype
+   (FullFileType* can be cast to filetype*). This is used in
+   filetypes_new() to hide filetype struct fields from the API.
+   Remove radio_items[] and use FullFileType::menu_item instead.
+
+
 2008-05-01  Nick Treleaven  <nick(dot)treleaven(at)btinternet(dot)com>
 
  * src/plugindata.h, src/keyfile.c, src/filetypes.c, src/filetypes.h:

Modified: branches/custom-filetypes/src/filetypes.c
===================================================================
--- branches/custom-filetypes/src/filetypes.c	2008-05-06 12:43:21 UTC (rev 2551)
+++ branches/custom-filetypes/src/filetypes.c	2008-05-06 17:04:06 UTC (rev 2552)
@@ -40,13 +40,21 @@
 #include "ui_utils.h"
 
 
+/* This type 'inherits' from filetype so FullFileType* can be cast to filetype*. */
+typedef struct FullFileType
+{
+	filetype	public;
+	/* Private fields */
+	GtkWidget	*menu_item;			/* holds a pointer to the menu item for this filetype */
+}
+FullFileType;
+
+
 GPtrArray *filetypes_array = NULL;	/* Dynamic array of filetype pointers */
 
 GHashTable *filetypes_hash = NULL;	/* Hash of filetype pointers based on name keys */
 
 
-static GtkWidget *radio_items[GEANY_MAX_FILE_TYPES];
-
 static void create_radio_menu_item(GtkWidget *menu, const gchar *label, filetype *ftype);
 
 
@@ -408,12 +416,13 @@
 /* initialize fields. */
 static filetype *filetypes_new(void)
 {
-	filetype *ft = g_new0(filetype, 1);
+	FullFileType *fft = g_new0(FullFileType, 1);
+	filetype *ft = (filetype*) fft;
 
 /*
 	ft->id = GEANY_FILETYPES_OTHER;
 */
-	ft->lang = -2;	/* no tagmanager parser */
+	ft->lang = -2;	/* assume no tagmanager parser */
 	ft->programs = g_new0(struct build_programs, 1);
 	ft->actions = g_new0(struct build_actions, 1);
 	return ft;
@@ -504,7 +513,6 @@
 			}
 			default: break;
 		}
-		ft->item = NULL;
 		create_radio_menu_item(sub_menu, title, ft);
 	}
 }
@@ -693,12 +701,16 @@
 
 void filetypes_select_radio_item(const filetype *ft)
 {
+	FullFileType *fft;
+
 	/* app->ignore_callback has to be set by the caller */
+	g_return_if_fail(app->ignore_callback);
+
 	if (ft == NULL)
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(
-			radio_items[filetypes[GEANY_FILETYPES_ALL]->id]), TRUE);
-	else
-		gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(radio_items[ft->id]), TRUE);
+		ft = filetypes[GEANY_FILETYPES_ALL];
+
+	fft = (FullFileType*)ft;
+	gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(fft->menu_item), TRUE);
 }
 
 
@@ -717,10 +729,11 @@
 {
 	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));
-	radio_items[ftype->id] = tmp;
+	fft->menu_item = tmp;
 	gtk_widget_show(tmp);
 	gtk_container_add(GTK_CONTAINER(menu), tmp);
 	g_signal_connect((gpointer) tmp, "activate", G_CALLBACK(on_filetype_change), (gpointer) ftype);

Modified: branches/custom-filetypes/src/filetypes.h
===================================================================
--- branches/custom-filetypes/src/filetypes.h	2008-05-06 12:43:21 UTC (rev 2551)
+++ branches/custom-filetypes/src/filetypes.h	2008-05-06 17:04:06 UTC (rev 2552)
@@ -106,7 +106,6 @@
 struct filetype
 {
 	filetype_id		  id;
-	GtkWidget		 *item;				/* holds a pointer to the menu item for this filetypes */
 	langType 		  lang;				/* represents the langType of tagmanager(see the table */
 										/* in tagmanager/parsers.h), -1 represents all, -2 none */
 	gchar	 		 *name;				/* will be used as name for tagmanager */


This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.



More information about the Commits mailing list