anjuta r3850 - in trunk: . libanjuta src



Author: naba
Date: Sat Apr 12 21:22:48 2008
New Revision: 3850
URL: http://svn.gnome.org/viewvc/anjuta?rev=3850&view=rev

Log:
	Reviewed by Naba Kumar  <naba gnome org>:
	* libanjuta/anjuta-utils.{ch}:
	Added anjuta_utils_get_user_config_dir. This func is used
	to get the user config directory.
	* anjuta/anjuta-app.{ch}: Switched from GnomeApp to GtkWindow.


Modified:
   trunk/ChangeLog
   trunk/libanjuta/anjuta-utils.c
   trunk/libanjuta/anjuta-utils.h
   trunk/src/anjuta-app.c
   trunk/src/anjuta-app.h

Modified: trunk/libanjuta/anjuta-utils.c
==============================================================================
--- trunk/libanjuta/anjuta-utils.c	(original)
+++ trunk/libanjuta/anjuta-utils.c	Sat Apr 12 21:22:48 2008
@@ -47,8 +47,7 @@
 
 #include <glib/gi18n.h>
 #include <glib.h>
-
-#include <libgnome/gnome-util.h>
+#include <glib/gstdio.h>
 
 #include <libanjuta/anjuta-utils.h>
 #include <libanjuta/anjuta-debug.h>
@@ -1407,3 +1406,32 @@
 	g_free (command);
 }
 
+/**
+ * anjuta_utils_get_user_config_dir:
+ *
+ * Returns a base directory in which to store user-specific application 
+ * configuration information such as user preferences and settings. 
+ *
+ * Return value: a new allocated string with the user config directory.
+ */
+gchar *
+anjuta_util_get_user_config_dir ()
+{
+	gchar *folder;
+	
+	folder =  g_build_filename (g_get_user_config_dir (), "anjuta", NULL);
+	
+	if (!g_file_test (folder, G_FILE_TEST_IS_DIR))
+	{
+		if (g_mkdir (folder, 755) == -1)
+		{
+			g_warning ("There was an error creating the Anjuta config directory");
+			g_free (folder);
+			
+			return NULL;
+		}
+	}
+
+	return folder;
+}
+

Modified: trunk/libanjuta/anjuta-utils.h
==============================================================================
--- trunk/libanjuta/anjuta-utils.h	(original)
+++ trunk/libanjuta/anjuta-utils.h	Sat Apr 12 21:22:48 2008
@@ -117,6 +117,8 @@
 							   const gchar *doc_id,
 							   const gchar *file_name);
 
+gchar *anjuta_util_get_user_config_dir ();
+
 /* Temporarily copied here */
 
 #define ANJUTA_TYPE_BEGIN(class_name, prefix, parent_type) \

Modified: trunk/src/anjuta-app.c
==============================================================================
--- trunk/src/anjuta-app.c	(original)
+++ trunk/src/anjuta-app.c	Sat Apr 12 21:22:48 2008
@@ -27,9 +27,9 @@
 #include <ctype.h>
 #include <sys/wait.h>
 
-#include <gnome.h>
+#include <glade/glade-xml.h>
 #include <gtk/gtkwidget.h>
-#include <glade/glade.h>
+#include <gtk/gtkwindow.h>
 
 #include <gdl/gdl-dock.h>
 #include <gdl/gdl-dock-bar.h>
@@ -51,11 +51,6 @@
 #define GLADE_FILE PACKAGE_DATA_DIR"/glade/anjuta.glade"
 #define ICON_FILE "anjuta-preferences-general-48.png"
 
-#define DOCK_PH_LEFT    "ph_left"
-#define DOCK_PH_RIGHT   "ph_right"
-#define DOCK_PH_TOP     "ph_top"
-#define DOCK_PH_BOTTOM  "ph_bottom"
-
 static void anjuta_app_layout_load (AnjutaApp *app,
 									const gchar *layout_filename,
 									const gchar *name);
@@ -113,6 +108,51 @@
 }
 	
 
+/*
+ * Accels
+ */
+static gchar *
+get_accel_file (void)
+{
+	gchar *anjuta_dir = NULL;
+	gchar *filename = NULL;
+
+	anjuta_dir = anjuta_util_get_user_config_dir ();
+
+	if (anjuta_dir != NULL)
+		filename = g_build_filename (anjuta_dir, "anjuta-accels", NULL);
+	
+	g_free (anjuta_dir);
+
+	return filename;
+}
+
+static void
+load_accels (void)
+{
+	gchar *filename;
+
+	filename = get_accel_file ();
+	if (filename != NULL)
+	{
+		gtk_accel_map_load (filename);
+		g_free (filename);
+	}
+}
+
+static void
+save_accels (void)
+{
+	gchar *filename;
+
+	filename = get_accel_file ();
+	if (filename != NULL)
+	{
+		gtk_accel_map_save (filename);
+		g_free (filename);
+	}
+}
+
 static void
 on_gdl_style_changed (GConfClient* client, guint id, GConfEntry* entry,
 					  gpointer user_data)
@@ -140,7 +180,7 @@
 		g_free (pr_style);
 	}
 	g_object_set (G_OBJECT(app->layout_manager->master), "switcher-style",
-					  style, NULL);
+				  style, NULL);
 }
 
 static void
@@ -193,9 +233,8 @@
 }
 
 static void
-on_layout_locked_notify (GdlDockMaster *master,
-                         GParamSpec    *pspec,
-                         AnjutaApp     *app)
+on_layout_locked_notify (GdlDockMaster *master, GParamSpec *pspec,
+						 AnjutaApp     *app)
 {
 	AnjutaUI *ui;
 	GtkAction *action;
@@ -211,10 +250,45 @@
 }
 
 static void
+layout_changed (GtkWidget *w, AnjutaApp *app)
+{
+	BonoboDockLayout *layout;
+	gchar *s;
+	
+	g_return_if_fail (ANJUTA_IS_APP (app));
+	g_return_if_fail (BONOBO_IS_DOCK (w));
+
+	layout = bonobo_dock_get_layout (BONOBO_DOCK (app->bonobo_dock));
+	s = bonobo_dock_layout_create_string (layout);
+	anjuta_preferences_set (app->preferences, "anjuta.bonobo.layout", s);
+	g_object_unref (G_OBJECT (layout));
+	g_free (s);
+}
+
+static void
+anjuta_app_add_dock_item (AnjutaApp *app, BonoboDockItem *item,
+						  BonoboDockPlacement placement, gint band_num,
+						  gint band_position, gint offset)
+{
+	if (app->bonobo_layout)
+		bonobo_dock_layout_add_item (app->bonobo_layout,
+									 BONOBO_DOCK_ITEM (item),
+									 placement, band_num, band_position,
+									 offset);
+	else
+		bonobo_dock_add_item (BONOBO_DOCK(app->bonobo_dock),
+							  BONOBO_DOCK_ITEM( item),
+							  placement, band_num, band_position, offset, FALSE);
+
+	g_signal_emit_by_name (app->bonobo_dock, "layout_changed", app);
+}
+
+
+static void
 on_toolbar_view_toggled (GtkCheckMenuItem *menuitem, GtkWidget *widget)
 {
 	AnjutaApp *app;
-	BonoboDockItem *dock_item;
+	GtkWidget *dock_item;
 	const gchar *name;
 	gint band;
 	gint position;
@@ -240,28 +314,30 @@
 			 * a previously used name (even if the previous widget has
 			 * has be destroyed. Hence a unique_name is used by using a 
 			 * static counter */
-			DEBUG_PRINT ("Adding dock item %s band %d, offset %d, position %d", unique_name,
-						 band, offset, position);
-			
+			DEBUG_PRINT ("Adding dock item %s band %d, offset %d, position %d",
+						 unique_name, band, offset, position);
+
+			dock_item = bonobo_dock_item_new (unique_name,
+											  BONOBO_DOCK_ITEM_BEH_NEVER_VERTICAL |
+											  BONOBO_DOCK_ITEM_BEH_NEVER_FLOATING);
+
+			gtk_container_add (GTK_CONTAINER (dock_item), widget);
+
 			/* Widget not yet added to the dock. Add it */
-			gnome_app_add_docked (GNOME_APP (app), widget,
-								  unique_name,
-								  BONOBO_DOCK_ITEM_BEH_NEVER_VERTICAL |
-								  BONOBO_DOCK_ITEM_BEH_NEVER_FLOATING,
-								  BONOBO_DOCK_TOP, band, position, offset);
-									   									   
-			dock_item = gnome_app_get_dock_item_by_name (GNOME_APP (app),
-														 unique_name);
-			g_object_set_data_full (G_OBJECT(dock_item), "unique_name", unique_name, g_free);
+			anjuta_app_add_dock_item (app, BONOBO_DOCK_ITEM (dock_item),
+									  BONOBO_DOCK_TOP, band, position, offset);
+
+			g_object_set_data_full (G_OBJECT(dock_item), "unique_name",
+									unique_name, g_free);
 			g_object_set_data (G_OBJECT(widget), "dock_item", dock_item);
 			count++;
 		}
-		gtk_widget_show (GTK_WIDGET (dock_item));
+		gtk_widget_show (dock_item);
 		gtk_widget_show (GTK_BIN (dock_item)->child);
 	}
 	else if (dock_item)
 	{
-		gtk_widget_hide (GTK_WIDGET (dock_item));
+		gtk_widget_hide (dock_item);
 		gtk_widget_hide (GTK_BIN (dock_item)->child);
 	}
 }
@@ -282,8 +358,8 @@
 	
 	if (GTK_IS_MENU_BAR (widget))
 	{
-		gnome_app_set_menus (GNOME_APP (ui_container), GTK_MENU_BAR (widget));
-		gtk_widget_show (widget);
+		/* We don't need to manage GtkMenuBar widgets */
+		return;
 	}
 	else
 	{
@@ -392,7 +468,6 @@
 			gchar* band_key = g_strconcat (toolbarname, ".band", NULL);
 			gchar* position_key = g_strconcat (toolbarname, ".position", NULL);
 			gchar* offset_key = g_strconcat (toolbarname, ".offset", NULL);
-			GnomeApp* gnome_app = GNOME_APP(app);
 			
 			/* Save visibility */
 			g_object_get(G_OBJECT(dock_item), "visible", &visible, NULL);
@@ -400,23 +475,28 @@
 			g_free(key);
 			
 			/* Save toolbar position */
-			if (gnome_app->dock != NULL)
+			if (app->bonobo_dock != NULL)
 			{
 				guint band;
 				guint position;
 				guint offset;
 				BonoboDockPlacement placement;
-				gchar* unique_name = g_object_get_data(G_OBJECT(dock_item), "unique_name");
+				gchar* unique_name = g_object_get_data(G_OBJECT(dock_item),
+													   "unique_name");
 				
-				BonoboDockItem* item = bonobo_dock_get_item_by_name(BONOBO_DOCK(gnome_app->dock), 
-																  unique_name, &placement, 
-																   &band, &position, &offset);
+				BonoboDockItem* item = bonobo_dock_get_item_by_name(BONOBO_DOCK(app->bonobo_dock), 
+																	unique_name, &placement, 
+																	&band, &position, &offset);
 				g_return_if_fail(item != NULL);
 			
 				anjuta_preferences_set_int(pr, band_key, band);
 				anjuta_preferences_set_int(pr, position_key, position);
 				anjuta_preferences_set_int(pr, offset_key, offset);
 			}
+			
+			g_free (band_key);
+			g_free (position_key);
+			g_free (offset_key);
 		}
 		node = g_list_next(node);
 	}
@@ -489,13 +569,6 @@
 }
 
 static void
-on_accel_changed (GtkAccelGroup *accelgroup, guint arg1, GdkModifierType arg2,
-				  GClosure *arg3, AnjutaApp *app)
-{
-	gnome_accelerators_sync ();
-}
-
-static void
 anjuta_app_dispose (GObject *widget)
 {
 	AnjutaApp *app;
@@ -561,7 +634,8 @@
 		g_object_unref (G_OBJECT (app->status));
 		app->status = NULL;
 	}
-	GNOME_CALL_PARENT(G_OBJECT_CLASS, dispose, (widget));
+
+	G_OBJECT_CLASS (parent_class)->dispose (widget);
 }
 
 static void
@@ -576,19 +650,20 @@
 	gtk_widget_destroy (GTK_WIDGET (app->ui));
 	gtk_widget_destroy (GTK_WIDGET (app->preferences));
 	
-	GNOME_CALL_PARENT(G_OBJECT_CLASS, finalize, (widget));
+	G_OBJECT_CLASS (parent_class)->finalize (widget);
 }
 
 static void
 anjuta_app_instance_init (AnjutaApp *app)
 {
 	gint merge_id;
-	GtkWidget *toolbar_menu, *about_menu;
+	GtkWidget *menubar, *toolbar_menu, *about_menu;
 	GtkWidget *view_menu, *hbox;
+	GtkWidget *main_box;
 	GtkWidget *dockbar;
-	GtkAccelGroup *accel_group;
 	GtkAction* action;
 	GList *plugins_dirs = NULL;
+	gchar *bonobo_string = NULL;
 	GdkGeometry size_hints = {
     	100, 100, 0, 0, 100, 100, 1, 1, 0.0, 0.0, GDK_GRAVITY_NORTH_WEST
   	};
@@ -599,17 +674,30 @@
 								   &size_hints, GDK_HINT_RESIZE_INC);
 	gtk_window_set_resizable (GTK_WINDOW (app), TRUE);
 	
-	gnome_app_enable_layout_config (GNOME_APP (app), FALSE);
-	
+	/*
+	 * Main box
+	 */
+	main_box = gtk_vbox_new (FALSE, 0);
+	gtk_container_add (GTK_CONTAINER (app), main_box);
+	gtk_widget_show (main_box);
+		
 	app->layout_manager = NULL;
 	
 	app->values = NULL;
 	app->widgets = NULL;
-
+	
+	/* Status bar */
+	app->status = ANJUTA_STATUS (anjuta_status_new ());
+	anjuta_status_set_title_window (app->status, GTK_WIDGET (app));
+	gtk_widget_show (GTK_WIDGET (app->status));
+	gtk_box_pack_end (GTK_BOX (main_box),
+					  GTK_WIDGET (app->status), FALSE, TRUE, 0);
+	g_object_ref (G_OBJECT (app->status));
+	g_object_add_weak_pointer (G_OBJECT (app->status), (gpointer)&app->status);
+	
 	/* configure dock */
 	hbox = gtk_hbox_new (FALSE, 0);
 	gtk_widget_show (hbox);
-	gnome_app_set_contents (GNOME_APP (app), hbox);
 	app->dock = gdl_dock_new ();
 	gtk_widget_show (app->dock);
 	gtk_box_pack_end(GTK_BOX (hbox), app->dock, TRUE, TRUE, 0);
@@ -617,28 +705,17 @@
 	dockbar = gdl_dock_bar_new (GDL_DOCK(app->dock));
 	gtk_widget_show (dockbar);
 	gtk_box_pack_start(GTK_BOX (hbox), dockbar, FALSE, FALSE, 0);
+	gtk_box_pack_end (GTK_BOX (main_box), hbox, TRUE, TRUE, 0);
 	
 	app->layout_manager = gdl_dock_layout_new (GDL_DOCK (app->dock));
 	g_signal_connect (app->layout_manager, "notify::dirty",
 					  G_CALLBACK (on_layout_dirty_notify), app);
 	g_signal_connect (app->layout_manager->master, "notify::locked",
 					  G_CALLBACK (on_layout_locked_notify), app);
-	/* Status bar */
-	app->status = ANJUTA_STATUS (anjuta_status_new ());
-	anjuta_status_set_title_window (app->status, GTK_WIDGET (app));
-	gtk_widget_show (GTK_WIDGET (app->status));
-	gnome_app_set_statusbar (GNOME_APP (app), GTK_WIDGET (app->status));
-	g_object_ref (G_OBJECT (app->status));
-	g_object_add_weak_pointer (G_OBJECT (app->status), (gpointer)&app->status);
 	
 	/* UI engine */
 	app->ui = anjuta_ui_new ();
 	
-	accel_group = anjuta_ui_get_accel_group (app->ui);
-	g_signal_connect (accel_group, "accel-changed",
-					  G_CALLBACK (on_accel_changed), app);
-	
-	gtk_window_add_accel_group (GTK_WINDOW (app), accel_group);
 	g_signal_connect (G_OBJECT (app->ui),
 					  "add_widget", G_CALLBACK (on_add_merge_widget),
 					  app);
@@ -690,15 +767,47 @@
 										G_N_ELEMENTS (menu_entries_help),
 										GETTEXT_PACKAGE, TRUE, app);
 
+	/* Bonobo stuff */	
+	app->bonobo_dock = bonobo_dock_new ();
+	gtk_widget_show (app->bonobo_dock);
+	
+	g_signal_connect (app->bonobo_dock, "layout_changed",
+					  G_CALLBACK (layout_changed), app);
+	
+	app->bonobo_layout = bonobo_dock_layout_new ();
+	
+	bonobo_string = anjuta_preferences_get (app->preferences, "anjuta.bonobo.layout");
+	if (bonobo_string)
+	{
+		bonobo_dock_layout_parse_string (app->bonobo_layout, bonobo_string);
+		g_free (bonobo_string);
+	}
+			    
+	bonobo_dock_add_from_layout (BONOBO_DOCK (app->bonobo_dock),
+								 app->bonobo_layout);
+						    
+	g_object_unref (app->bonobo_layout);
+	app->bonobo_layout = NULL;
+
 	/* Merge UI */
 	merge_id = anjuta_ui_merge (app->ui, UI_FILE);
-
-	/* Disable unavailible tutorials */
-	action = anjuta_ui_get_action(app->ui, "ActionGroupHelp", "ActionHelpTutorial");
-	g_object_set(G_OBJECT(action), "visible", FALSE, NULL);
-	action = anjuta_ui_get_action(app->ui, "ActionGroupHelp", "ActionHelpAdvancedTutorial");
-	g_object_set(G_OBJECT(action), "visible", FALSE, NULL);
-
+	
+	/* Adding accels group */
+	gtk_window_add_accel_group (GTK_WINDOW (app), 
+								gtk_ui_manager_get_accel_group (GTK_UI_MANAGER (app->ui)));
+	
+	/* create main menu */
+	menubar = gtk_ui_manager_get_widget (GTK_UI_MANAGER (app->ui),
+										 "/MenuMain");
+	gtk_box_pack_start (GTK_BOX (main_box), menubar, FALSE, FALSE, 0);
+	gtk_widget_show (menubar);
+	
+	/*
+	 * We have to add the dock after merging the ui
+	 */
+	gtk_box_pack_start (GTK_BOX (main_box), app->bonobo_dock,
+			    FALSE, FALSE, 0);
+	
 	/* create toolbar menus */
 	toolbar_menu =
 		gtk_ui_manager_get_widget (GTK_UI_MANAGER(app->ui),
@@ -713,7 +822,13 @@
 	view_menu = 
 		gtk_ui_manager_get_widget (GTK_UI_MANAGER(app->ui),
 								  "/MenuMain/MenuView");
-	app->view_menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (view_menu));
+	app->view_menu = gtk_menu_item_get_submenu (GTK_MENU_ITEM (view_menu));	
+
+	/* Disable unavailible tutorials */
+	action = anjuta_ui_get_action(app->ui, "ActionGroupHelp", "ActionHelpTutorial");
+	g_object_set(G_OBJECT(action), "visible", FALSE, NULL);
+	action = anjuta_ui_get_action(app->ui, "ActionGroupHelp", "ActionHelpAdvancedTutorial");
+	g_object_set(G_OBJECT(action), "visible", FALSE, NULL);
 	
 	/* Create about plugins menu */
 	about_menu = 
@@ -727,6 +842,9 @@
 					  G_CALLBACK (on_session_save), app);
 	g_signal_connect (G_OBJECT (app), "load_session",
 					  G_CALLBACK (on_session_load), app);
+	
+	/* Loading accels */
+	load_accels ();
 }
 
 static void
@@ -828,6 +946,9 @@
 	gdl_dock_layout_save_layout (app->layout_manager, name);
 	if (!gdl_dock_layout_save_to_file (app->layout_manager, filename))
 		g_warning ("Saving dock layout to '%s' failed!", filename);
+		
+	/* This is a good place to save the accels too */
+	save_accels ();
 }
 
 static void
@@ -1279,6 +1400,6 @@
 	iface->get_profile_manager = anjuta_app_get_profile_manager;
 }
 
-ANJUTA_TYPE_BEGIN(AnjutaApp, anjuta_app, GNOME_TYPE_APP);
+ANJUTA_TYPE_BEGIN(AnjutaApp, anjuta_app, GTK_TYPE_WINDOW);
 ANJUTA_TYPE_ADD_INTERFACE(anjuta_shell, ANJUTA_TYPE_SHELL);
 ANJUTA_TYPE_END;

Modified: trunk/src/anjuta-app.h
==============================================================================
--- trunk/src/anjuta-app.h	(original)
+++ trunk/src/anjuta-app.h	Sat Apr 12 21:22:48 2008
@@ -22,7 +22,6 @@
 #define _ANJUTA_APP_H_
 
 #include <gmodule.h>
-#include <glade/glade.h>
 #include <gdl/gdl-dock-layout.h>
 #include <libanjuta/anjuta-status.h>
 #include <libanjuta/anjuta-ui.h>
@@ -43,7 +42,7 @@
 
 struct _AnjutaApp
 {
-	GnomeApp parent;
+	GtkWindow parent;
 	GtkWidget *toolbars_menu;
 	GtkWidget *view_menu;
 	GtkWidget *dock;
@@ -59,11 +58,15 @@
 	AnjutaPreferences *preferences;
 	AnjutaPluginManager *plugin_manager;
 	AnjutaProfileManager *profile_manager;
+	
+	/* Bonobo */
+	GtkWidget *bonobo_dock;
+	BonoboDockLayout *bonobo_layout;
 };
 
 struct _AnjutaAppClass
 {
-	GnomeAppClass klass;
+	GtkWindowClass klass;
 };
 
 GType      anjuta_app_get_type (void);



[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]