SF.net SVN: geany: [900] trunk

ntrel at users.sourceforge.net ntrel at xxxxx
Tue Oct 17 12:52:41 UTC 2006


Revision: 900
          http://svn.sourceforge.net/geany/?rev=900&view=rev
Author:   ntrel
Date:     2006-10-17 05:52:32 -0700 (Tue, 17 Oct 2006)

Log Message:
-----------
Disable Make All, Make Custom menu items for unnamed files.
Allow Run and Make Object for C header files.

Modified Paths:
--------------
    trunk/ChangeLog
    trunk/src/callbacks.c
    trunk/src/filetypes.h
    trunk/src/ui_utils.c

Modified: trunk/ChangeLog
===================================================================
--- trunk/ChangeLog	2006-10-17 09:01:13 UTC (rev 899)
+++ trunk/ChangeLog	2006-10-17 12:52:32 UTC (rev 900)
@@ -1,3 +1,10 @@
+2006-10-17  Nick Treleaven  <nick.treleaven at btinternet.com>
+
+ * src/callbacks.c, src/filetypes.h, src/ui_utils.c:
+   Disable Make All, Make Custom menu items for unnamed files.
+   Allow Run and Make Object for C header files.
+
+
 2006-10-17  Enrico Tröger  <enrico.troeger at uvena.de>
 
  * THANKS, configure.in, src/about.c:

Modified: trunk/src/callbacks.c
===================================================================
--- trunk/src/callbacks.c	2006-10-17 09:01:13 UTC (rev 899)
+++ trunk/src/callbacks.c	2006-10-17 12:52:32 UTC (rev 900)
@@ -1621,14 +1621,13 @@
                                         gpointer         user_data)
 {
 	gint idx = document_get_cur_idx();
-	gint build_opts = GBO_MAKE_ALL;
+	gint build_opts = GPOINTER_TO_INT(user_data);
 
-	//CHECK MENUS DISABLED
 	g_return_if_fail(DOC_IDX_VALID(idx) && doc_list[idx].file_name != NULL);
 
-	switch (GPOINTER_TO_INT(user_data))
+	switch (build_opts)
 	{
-		case 1: //custom target
+		case GBO_MAKE_CUSTOM:
 		{
 			dialogs_show_input(_("Enter custom options for the make tool"),
 				_("Enter custom options here, all entered text is passed to the make command."),
@@ -1638,11 +1637,9 @@
 			break;
 		}
 
-		case 2: //make object
-		build_opts = GBO_MAKE_OBJECT;
+		case GBO_MAKE_OBJECT:
 		// fall through
-
-		case 0: //make all
+		case GBO_MAKE_ALL:
 		{
 			GPid child_pid;
 

Modified: trunk/src/filetypes.h
===================================================================
--- trunk/src/filetypes.h	2006-10-17 09:01:13 UTC (rev 899)
+++ trunk/src/filetypes.h	2006-10-17 12:52:32 UTC (rev 900)
@@ -70,6 +70,8 @@
 	GtkWidget		*item_compile;
 	GtkWidget		*item_link;
 	GtkWidget		*item_exec;
+	GtkWidget		*item_make_all;
+	GtkWidget		*item_make_custom;
 	GtkWidget		*item_make_object;
 	gboolean		 can_compile;
 	gboolean		 can_link;

Modified: trunk/src/ui_utils.c
===================================================================
--- trunk/src/ui_utils.c	2006-10-17 09:01:13 UTC (rev 899)
+++ trunk/src/ui_utils.c	2006-10-17 12:52:32 UTC (rev 900)
@@ -37,6 +37,7 @@
 #include "images.c"
 #include "treeviews.h"
 #include "keybindings.h"
+#include "build.h"
 
 
 static gchar *menu_item_get_text(GtkMenuItem *menu_item);
@@ -623,11 +624,22 @@
 }
 
 
-void ui_update_build_menu(gint idx)
+static gboolean is_c_header(const gchar *fname)
 {
-	gboolean is_header = FALSE;
 	gchar *ext = NULL;
+
+	if (fname)
+	{
+		ext = strrchr(fname, '.');
+	}
+	return (ext == NULL) ? FALSE : (*(ext + 1) == 'h');	// match *.h*
+}
+
+
+void ui_update_build_menu(gint idx)
+{
 	filetype *ft;
+	gboolean have_path;
 
 	if (idx == -1 || doc_list[idx].file_type == NULL)
 	{
@@ -648,118 +660,60 @@
 	ft->menu_items->can_link = FALSE;
 #endif
 
-	if (doc_list[idx].file_name)
-	{
-		ext = strrchr(doc_list[idx].file_name, '.');
-	}
+	gtk_menu_item_remove_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")));
 
-	/// TODO: separate function for matching headers, perhaps based on file extensions
-	if (! ext || utils_strcmp(ext + 1, "h") || utils_strcmp(ext + 1, "hpp") ||
-		utils_strcmp(ext + 1, "hxx"))
+	if (ft->menu_items->menu == NULL)
 	{
-		is_header = TRUE;
+		ft->menu_items->menu = (ft->id == GEANY_FILETYPES_LATEX) ?
+			create_build_menu_tex(idx) : create_build_menu_gen(idx);
+		g_object_ref((gpointer)ft->menu_items->menu);	// to hold it after removing
 	}
+	gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")),
+						ft->menu_items->menu);
 
-	gtk_menu_item_remove_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")));
-
+	have_path = (doc_list[idx].file_name != NULL);
+	// update the Make items
+	if (ft->menu_items->item_make_all != NULL)
+		gtk_widget_set_sensitive(ft->menu_items->item_make_all, have_path);
+	if (ft->menu_items->item_make_custom != NULL)
+		gtk_widget_set_sensitive(ft->menu_items->item_make_custom, have_path);
+	if (ft->menu_items->item_make_object != NULL)
+		gtk_widget_set_sensitive(ft->menu_items->item_make_object, have_path);
+	
 	switch (ft->id)
 	{
-		case GEANY_FILETYPES_C:	// intended fallthrough, C and C++ behave equal
-		case GEANY_FILETYPES_CPP:
+		case GEANY_FILETYPES_LATEX:
 		{
-			if (ft->menu_items->menu == NULL)
-			{
-				ft->menu_items->menu = create_build_menu_gen(idx);
-				g_object_ref((gpointer)ft->menu_items->menu);	// to hold it after removing
-
-			}
-			gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")),
-								ft->menu_items->menu);
-
-			if (is_header) // means also filename is NULL
-			{
-				gtk_widget_set_sensitive(app->compile_button, FALSE);
-				gtk_widget_set_sensitive(app->run_button, FALSE);
-				if (ft->menu_items->can_compile)
-					gtk_widget_set_sensitive(ft->menu_items->item_compile, FALSE);
-				if (ft->menu_items->can_link)
-					gtk_widget_set_sensitive(ft->menu_items->item_link, FALSE);
-				if (ft->menu_items->can_exec)
-					gtk_widget_set_sensitive(ft->menu_items->item_exec, FALSE);
-				gtk_widget_set_sensitive(ft->menu_items->item_make_object, FALSE);
-			}
-			else
-			{
-				gtk_widget_set_sensitive(app->compile_button, TRUE);
-				gtk_widget_set_sensitive(app->run_button, TRUE);
-				if (ft->menu_items->can_compile)
-					gtk_widget_set_sensitive(ft->menu_items->item_compile, TRUE);
-				if (ft->menu_items->can_link)
-					gtk_widget_set_sensitive(ft->menu_items->item_link, TRUE);
-				if (ft->menu_items->can_exec)
-					gtk_widget_set_sensitive(ft->menu_items->item_exec, TRUE);
-				gtk_widget_set_sensitive(ft->menu_items->item_make_object, TRUE);
-			}
+			gtk_widget_set_sensitive(app->compile_button, have_path && ft->menu_items->can_compile);
+			gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec);
 			break;
 		}
-		case GEANY_FILETYPES_LATEX:
+		case GEANY_FILETYPES_C:	// intended fallthrough, C and C++ behave equal
+		case GEANY_FILETYPES_CPP:
 		{
-			if (ft->menu_items->menu == NULL)
-			{
-				ft->menu_items->menu = create_build_menu_tex(idx);
-				g_object_ref((gpointer)ft->menu_items->menu);	// to hold it after removing
-			}
-			if (doc_list[idx].file_name == NULL)
-			{
-				gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")),
-								ft->menu_items->menu);
-				gtk_widget_set_sensitive(app->compile_button, FALSE);
-				gtk_widget_set_sensitive(app->run_button, FALSE);
-			}
-			else
-			{
-				gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")),
-								ft->menu_items->menu);
-				gtk_widget_set_sensitive(app->compile_button, ft->menu_items->can_compile);
-				gtk_widget_set_sensitive(app->run_button, ft->menu_items->can_exec);
-			}
+			if (ft->menu_items->can_exec)
+				gtk_widget_set_sensitive(ft->menu_items->item_exec, have_path);
+			gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec);
 
+			// compile and link are disabled for header files
+			have_path = have_path && ! is_c_header(doc_list[idx].file_name);
+			gtk_widget_set_sensitive(app->compile_button, have_path && ft->menu_items->can_compile);
+			if (ft->menu_items->can_compile)
+				gtk_widget_set_sensitive(ft->menu_items->item_compile, have_path);
+			if (ft->menu_items->can_link)
+				gtk_widget_set_sensitive(ft->menu_items->item_link, have_path);
 			break;
 		}
 		default:
 		{
-			if (ft->menu_items->menu == NULL)
-			{
-				ft->menu_items->menu = create_build_menu_gen(idx);
-				g_object_ref((gpointer)ft->menu_items->menu);	// to hold it after removing
-			}
-			if (doc_list[idx].file_name == NULL)
-			{
-				gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")),
-								ft->menu_items->menu);
-				gtk_widget_set_sensitive(app->compile_button, FALSE);
-				gtk_widget_set_sensitive(app->run_button, FALSE);
-				if (ft->menu_items->can_compile)
-					gtk_widget_set_sensitive(ft->menu_items->item_compile, FALSE);
-				if (ft->menu_items->can_link)
-					gtk_widget_set_sensitive(ft->menu_items->item_link, FALSE);
-				if (ft->menu_items->can_exec) gtk_widget_set_sensitive(ft->menu_items->item_exec, FALSE);
-				gtk_widget_set_sensitive(ft->menu_items->item_make_object, FALSE);
-			}
-			else
-			{
-				gtk_menu_item_set_submenu(GTK_MENU_ITEM(lookup_widget(app->window, "menu_build1")),
-								ft->menu_items->menu);
-				gtk_widget_set_sensitive(app->compile_button, ft->menu_items->can_compile);
-				gtk_widget_set_sensitive(app->run_button, ft->menu_items->can_exec);
-				if (ft->menu_items->can_compile)
-					gtk_widget_set_sensitive(ft->menu_items->item_compile, TRUE);
-				if (ft->menu_items->can_link)
-					gtk_widget_set_sensitive(ft->menu_items->item_link, TRUE);
-				if (ft->menu_items->can_exec)
-					gtk_widget_set_sensitive(ft->menu_items->item_exec, TRUE);
-				gtk_widget_set_sensitive(ft->menu_items->item_make_object, TRUE);
-			}
+			gtk_widget_set_sensitive(app->compile_button, have_path && ft->menu_items->can_compile);
+			gtk_widget_set_sensitive(app->run_button, have_path && ft->menu_items->can_exec);
+			if (ft->menu_items->can_compile)
+				gtk_widget_set_sensitive(ft->menu_items->item_compile, have_path);
+			if (ft->menu_items->can_link)
+				gtk_widget_set_sensitive(ft->menu_items->item_link, have_path);
+			if (ft->menu_items->can_exec)
+				gtk_widget_set_sensitive(ft->menu_items->item_exec, have_path);
 		}
 	}
 }
@@ -821,16 +775,20 @@
 	gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
 										   "make tool and the default target"), NULL);
 	GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKE, item);
-	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(0));
+	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
+		GINT_TO_POINTER(GBO_MAKE_ALL));
+	ft->menu_items->item_make_all = item;
 
-	// build the code with make
+	// build the code with make custom
 	item = gtk_image_menu_item_new_with_mnemonic(_("Make custom _target"));
 	gtk_widget_show(item);
 	GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item);
 	gtk_container_add(GTK_CONTAINER(menu), item);
 	gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
 										   "make tool and the specified target"), NULL);
-	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(1));
+	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
+		GINT_TO_POINTER(GBO_MAKE_CUSTOM));
+	ft->menu_items->item_make_custom = item;
 
 	// build the code with make object
 	item = gtk_image_menu_item_new_with_mnemonic(_("Make _object"));
@@ -839,7 +797,8 @@
 	gtk_container_add(GTK_CONTAINER(menu), item);
 	gtk_tooltips_set_tip(tooltips, item, _("Compiles the current file using the "
 										   "make tool"), NULL);
-	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(2));
+	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
+		GINT_TO_POINTER(GBO_MAKE_OBJECT));
 	ft->menu_items->item_make_object = item;
 #endif
 
@@ -889,6 +848,7 @@
 	GtkWidget *menu, *item, *image, *separator;
 	GtkAccelGroup *accel_group = gtk_accel_group_new();
 	GtkTooltips *tooltips = GTK_TOOLTIPS(lookup_widget(app->window, "tooltips"));
+	filetype *ft = filetypes[GEANY_FILETYPES_LATEX];
 
 	menu = gtk_menu_new();
 
@@ -933,16 +893,20 @@
 	gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
 										   "make tool and the default target"), NULL);
 	GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKE, item);
-	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(0));
+	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
+		GINT_TO_POINTER(GBO_MAKE_ALL));
+	ft->menu_items->item_make_all = item;
 
-	// build the code with make
+	// build the code with make custom
 	item = gtk_image_menu_item_new_with_mnemonic(_("Make custom _target"));
 	gtk_widget_show(item);
 	GEANY_ADD_WIDGET_ACCEL(GEANY_KEYS_BUILD_MAKEOWNTARGET, item);
 	gtk_container_add(GTK_CONTAINER(menu), item);
 	gtk_tooltips_set_tip(tooltips, item, _("Builds the current file with the "
 										   "make tool and the specified target"), NULL);
-	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate), GINT_TO_POINTER(1));
+	g_signal_connect((gpointer) item, "activate", G_CALLBACK(on_build_make_activate),
+		GINT_TO_POINTER(GBO_MAKE_CUSTOM));
+	ft->menu_items->item_make_custom = item;
 
 	if (item != NULL)
 	{


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