[monkey-bubble: 32/753] Changed the names for the constants to look more GTK/GNOMEish.



commit 38926fa5c78d70d4da15d22e8f499886ade3f306
Author: Miguel de Icaza <miguel nuclecu unam mx>
Date:   Wed Dec 31 23:49:29 1997 +0000

    Changed the names for the constants to look more GTK/GNOMEish.
    
    Wed Dec 31 17:32:00 1997  Miguel de Icaza  <miguel nuclecu unam mx>
    
    	* libgnomeui/gnome-app.h, libgnomeui/gnome-app.c: Changed the
    	names for the constants to look more GTK/GNOMEish.
    
    	(gnome_app_create_menus, gnome_app_create_toolbar): avoid code
    	duplication they now call gnome_app_set_menus and
    	gnome_app_set_toolbar.
    
    	(gnome_app_set_toolbar, gnome_app_set_menus): they now place the
    	components depending on the settings for this particular
    	application using gnome-config.
    
    	(gnome_app_new): Now takes two parameter: the application
    	configuration file and the title (used for loading/saving
    	configuration)
    
    	* programs/gmailman/gmailman.m: Use the new gnome-app constants.
    
    	* programs/gulp/gulp.m: Use the new gnome-app constants.
    
    	* obgnome/ObgnomeAppWin.m: Adopt to new gnome-app.

 libgnomeui/Makefile.am |    2 -
 libgnomeui/gnome-app.c |  714 +++++++++++++++++++++++++-----------------------
 libgnomeui/gnome-app.h |  157 +++++++-----
 3 files changed, 465 insertions(+), 408 deletions(-)
---
diff --git a/libgnomeui/Makefile.am b/libgnomeui/Makefile.am
index d7caf42..bc156c9 100644
--- a/libgnomeui/Makefile.am
+++ b/libgnomeui/Makefile.am
@@ -17,7 +17,6 @@ libgnomeui_la_SOURCES = \
 	gnome-pixmap.c			\
 	gnome-properties.c		\
 	gnome-session.c			\
-	gnome-toolbar.c			\
 	gtk-clock.c
 
 libgnomeuiinclude_HEADERS = 		\
@@ -29,7 +28,6 @@ libgnomeuiinclude_HEADERS = 		\
 	gnome-messagebox.h		\
 	gnome-properties.h     		\
 	gnome-pixmap.h			\
-	gnome-toolbar.h			\
 	gnome-session.h			\
 	gtk-clock.h			\
 	libgnomeui.h
diff --git a/libgnomeui/gnome-app.c b/libgnomeui/gnome-app.c
index b487c38..7709c3b 100644
--- a/libgnomeui/gnome-app.c
+++ b/libgnomeui/gnome-app.c
@@ -1,136 +1,154 @@
+/*
+ * GnomeApp widget by Elliot Lee
+ */
 #include "libgnome/gnome-defs.h"
+#include "libgnome/gnome-util.h"
+#include "libgnome/gnome-config.h"
 #include "gnome-app.h"
 #include "gnome-pixmap.h"
 #include <string.h>
 #include <gtk/gtk.h>
 
-static void gnome_app_class_init(GnomeAppClass *appclass);
-static void gnome_app_destroy(GnomeApp *app);
-static void gnome_app_init(GnomeApp *app);
-static void gnome_app_do_menu_creation(GtkWidget *parent_widget,
-				       GnomeMenuInfo *menuinfo);
-static void gnome_app_do_toolbar_creation(GnomeApp *app,
-					  GtkWidget *parent_widget,
-					  GnomeToolbarInfo *tbinfo);
-static void gnome_app_rightclick_event(GtkWidget *widget,
-				       GdkEventButton *event,
-				       GnomeApp *app);
-static void gnome_app_setpos_activate(GtkMenuItem *menu_item,
-				      GnomeApp *app);
+static void gnome_app_class_init     	  (GnomeAppClass *appclass);
+static void gnome_app_destroy        	  (GnomeApp      *app);
+static void gnome_app_init           	  (GnomeApp      *app);
+static void gnome_app_do_menu_creation    (GtkWidget *parent_widget,
+					   GnomeMenuInfo *menuinfo);
+static void gnome_app_do_toolbar_creation (GnomeApp *app,
+					   GtkWidget *parent_widget,
+					   GnomeToolbarInfo *tbinfo);
+static void gnome_app_rightclick_event    (GtkWidget *widget,
+					   GdkEventButton *event,
+					   GnomeApp *app);
+static void gnome_app_setpos_activate     (GtkMenuItem *menu_item,
+					   GnomeApp *app);
+
 static GtkWindowClass *parent_class = NULL;
 
+/* keep in sync with GnomeAppWidgetPositionType */
+static char *locations [] = {
+	"top", "botton", "left", "right", "float,", NULL
+};
+
+static GnomeAppWidgetPositionType
+get_orientation (char *str)
+{
+	int i;
+	
+	for (i = 0; locations [i]; i++){
+		if (strcasecmp (str, locations [i]) == 0)
+			return i;
+	}
+	/* If we dont recognize it => top */
+	return GNOME_APP_POS_TOP;
+}
+
 guint
 gnome_app_get_type(void)
 {
-  static guint gnomeapp_type = 0;
-  if(!gnomeapp_type) {
-    GtkTypeInfo gnomeapp_info = {
-      "GnomeApp",
-      sizeof(GnomeApp),
-      sizeof(GnomeAppClass),
-      (GtkClassInitFunc) gnome_app_class_init,
-      (GtkObjectInitFunc) gnome_app_init,
-      (GtkArgFunc) NULL,
-    };
-    gnomeapp_type = gtk_type_unique(gtk_window_get_type(), &gnomeapp_info);
-    parent_class = gtk_type_class(gtk_window_get_type());
-  }
-  return gnomeapp_type;
+	static guint gnomeapp_type = 0;
+	if(!gnomeapp_type) {
+		GtkTypeInfo gnomeapp_info = {
+			"GnomeApp",
+			sizeof(GnomeApp),
+			sizeof(GnomeAppClass),
+			(GtkClassInitFunc) gnome_app_class_init,
+			(GtkObjectInitFunc) gnome_app_init,
+			(GtkArgFunc) NULL,
+		};
+		gnomeapp_type = gtk_type_unique(gtk_window_get_type(), &gnomeapp_info);
+		parent_class = gtk_type_class(gtk_window_get_type());
+	}
+	return gnomeapp_type;
 }
 
-static void gnome_app_class_init(GnomeAppClass *appclass)
+static void
+gnome_app_class_init(GnomeAppClass *appclass)
 {
-  GtkObjectClass *object_class = GTK_OBJECT_CLASS(appclass);
-  g_print("gnome_app_class_init()\n");
-  object_class->destroy = gnome_app_destroy;
+	GtkObjectClass *object_class = GTK_OBJECT_CLASS(appclass);
+	object_class->destroy = gnome_app_destroy;
 }
 
 static void
 gnome_app_init(GnomeApp *app)
 {
-  app->menubar = app->toolbar = app->contents = NULL;
-  app->table = gtk_table_new(3, 3, FALSE);
-  gtk_widget_show(app->table);
-  gtk_container_add(GTK_CONTAINER(app), app->table);
-
-  app->pos_menubar = app->pos_toolbar = POS_TOP;
+	app->menubar = app->toolbar = app->contents = NULL;
+	app->table = gtk_table_new(3, 3, FALSE);
+	gtk_widget_show(app->table);
+	gtk_container_add(GTK_CONTAINER(app), app->table);
+	
+	app->pos_menubar = app->pos_toolbar = GNOME_APP_POS_TOP;
 }
 
 GtkWidget *
-gnome_app_new(gchar *appname)
+gnome_app_new(gchar *appname, char *title)
 {
-  GtkWidget *retval;
-
-  retval = gtk_type_new(gnome_app_get_type());
-
-  if(appname)
-    gtk_window_set_title(GTK_WINDOW(retval), appname);
-  
-  return retval;
+	GtkWidget *retval;
+	GnomeApp  *app;
+	char      *prefix;
+		
+	retval = gtk_type_new(gnome_app_get_type());
+	app = GNOME_APP (retval);
+	app->name = g_strdup (appname);
+	app->prefix = g_copy_strings ("/", appname, "/", NULL);
+	if (title)
+		gtk_window_set_title(GTK_WINDOW(retval), title);
+	
+	return retval;
 }
 
-static void gnome_app_destroy(GnomeApp *app)
+static void
+gnome_app_destroy(GnomeApp *app)
 {
-  g_print("gnome_app_destroy()\n");
-
-  if(GTK_OBJECT_CLASS(parent_class)->destroy)
-    (* GTK_OBJECT_CLASS(parent_class)->destroy)(GTK_OBJECT(app));
+	g_free (app->name);
+	g_free (app->prefix);
+	if(GTK_OBJECT_CLASS(parent_class)->destroy)
+		(* GTK_OBJECT_CLASS(parent_class)->destroy)(GTK_OBJECT(app));
 }
 
 static void
 gnome_app_do_menu_creation(GtkWidget *parent_widget,
 			   GnomeMenuInfo *menuinfo)
 {
-  int i;
-  for(i = 0; menuinfo[i].type != MI_ENDOFINFO; i++)
-    {
-      menuinfo[i].widget = gtk_menu_item_new_with_label(menuinfo[i].label);
-      gtk_widget_show(menuinfo[i].widget);
-      gtk_menu_shell_append(GTK_MENU_SHELL(parent_widget),
-			    menuinfo[i].widget);
-
-      if(menuinfo[i].type == MI_ITEM)
+	int i;
+	for(i = 0; menuinfo[i].type != GNOME_APP_MENU_ENDOFINFO; i++)
 	{
-	  gtk_signal_connect(GTK_OBJECT(menuinfo[i].widget), "activate",
-			     menuinfo[i].moreinfo, NULL);
+		menuinfo[i].widget = gtk_menu_item_new_with_label(menuinfo[i].label);
+		gtk_widget_show(menuinfo[i].widget);
+		gtk_menu_shell_append(GTK_MENU_SHELL(parent_widget),
+				      menuinfo[i].widget);
+		
+		if(menuinfo[i].type == GNOME_APP_MENU_ITEM)
+		{
+			gtk_signal_connect(GTK_OBJECT(menuinfo[i].widget), "activate",
+					   menuinfo[i].moreinfo, NULL);
+		}
+		else if(menuinfo[i].type == GNOME_APP_MENU_SUBMENU)
+		{
+			GtkWidget *submenu;
+			submenu = gtk_menu_new();
+			gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuinfo[i].widget),
+						  submenu);
+			gnome_app_do_menu_creation(submenu, menuinfo[i].moreinfo);
+		}
 	}
-      else if(menuinfo[i].type == MI_SUBMENU)
-	{
-	  GtkWidget *submenu;
-	  submenu = gtk_menu_new();
-	  gtk_menu_item_set_submenu(GTK_MENU_ITEM(menuinfo[i].widget),
-				    submenu);
-	  gnome_app_do_menu_creation(submenu, menuinfo[i].moreinfo);
-	}
-    }
 }
 
 void
 gnome_app_create_menus(GnomeApp *app,
 		       GnomeMenuInfo *menuinfo)
 {
-  GtkWidget *hb;
-
-  g_return_if_fail(app != NULL);
-  g_return_if_fail(GNOME_IS_APP(app));
-  g_return_if_fail(app->menubar == NULL);
-
-  /*  hb = gtk_handle_box_new(); */
-  hb = gtk_handle_box_new();
-  gtk_widget_show(hb);
-  app->menubar = gtk_menu_bar_new();
-
-  gtk_signal_connect(GTK_OBJECT(app->menubar), "button_press_event",
-		     GTK_SIGNAL_FUNC(gnome_app_rightclick_event), app);
-  gtk_widget_show(app->menubar);
-  gtk_container_add(GTK_CONTAINER(hb), app->menubar);
-
-  if(menuinfo)
-    gnome_app_do_menu_creation(app->menubar, menuinfo);
-
-  gnome_app_set_positions(app,
-			  POS_TOP,
-			  POS_NOCHANGE);
+	GtkWidget *hb, *menubar;
+	
+	g_return_if_fail(app != NULL);
+	g_return_if_fail(GNOME_IS_APP(app));
+	g_return_if_fail(app->menubar == NULL);
+
+	menubar = gtk_menu_bar_new ();
+	gnome_app_set_menus (app, GTK_MENU_BAR (menubar));
+	
+	if(menuinfo)
+		gnome_app_do_menu_creation(app->menubar, menuinfo);
 }
 
 static void
@@ -138,176 +156,178 @@ gnome_app_do_toolbar_creation(GnomeApp *app,
 			      GtkWidget *parent_widget,
 			      GnomeToolbarInfo *tbinfo)
 {
-  int i;
-  GtkWidget *pmap;
-
-  if(!GTK_WIDGET(app)->window)
-    gtk_widget_realize(GTK_WIDGET(app));
-
-  for(i = 0; tbinfo[i].type != TBI_ENDOFINFO; i++)
-    {
-      if(tbinfo[i].type == TBI_ITEM)
-	{
-	  if(tbinfo[i].pixmap_type == PMAP_DATA)
-	    pmap = gnome_create_pixmap_widget_d(GTK_WIDGET(app),
-						parent_widget,
-						(char **)tbinfo[i].pixmap_info);
-	  else if(tbinfo[i].pixmap_type == PMAP_FILENAME)
-	    pmap = gnome_create_pixmap_widget(GTK_WIDGET(app),
-					      parent_widget,
-					      (char *)tbinfo[i].pixmap_info);
-	  else
-	    pmap = NULL;
-	  gtk_toolbar_append_item(GTK_TOOLBAR(parent_widget),
-				  tbinfo[i].text,
-				  tbinfo[i].tooltip_text,
-				  GTK_PIXMAP(pmap),
-				  tbinfo[i].clicked_callback,
-				  NULL);
-	}
-      else if(tbinfo[i].type == TBI_SPACE)
+	int i;
+	GtkWidget *pmap;
+	
+	if(!GTK_WIDGET(app)->window)
+		gtk_widget_realize(GTK_WIDGET(app));
+	
+	for(i = 0; tbinfo[i].type != GNOME_APP_TOOLBAR_ENDOFINFO; i++)
 	{
-	  gtk_toolbar_append_space(GTK_TOOLBAR(parent_widget));
+		if(tbinfo[i].type == GNOME_APP_TOOLBAR_ITEM)
+		{
+			if(tbinfo[i].pixmap_type == GNOME_APP_PIXMAP_DATA)
+				pmap = gnome_create_pixmap_widget_d(GTK_WIDGET(app),
+								    parent_widget,
+								    (char **)tbinfo[i].pixmap_info);
+			else if(tbinfo[i].pixmap_type == GNOME_APP_PIXMAP_FILENAME)
+				pmap = gnome_create_pixmap_widget(GTK_WIDGET(app),
+								  parent_widget,
+								  (char *)tbinfo[i].pixmap_info);
+			else
+				pmap = NULL;
+			gtk_toolbar_append_item(GTK_TOOLBAR(parent_widget),
+						tbinfo[i].text,
+						tbinfo[i].tooltip_text,
+						GTK_PIXMAP(pmap),
+						tbinfo[i].clicked_callback,
+						NULL);
+		}
+		else if(tbinfo[i].type == GNOME_APP_TOOLBAR_SPACE)
+		{
+			gtk_toolbar_append_space(GTK_TOOLBAR(parent_widget));
+		}
 	}
-    }
 }
 
 void gnome_app_create_toolbar(GnomeApp *app,
 			      GnomeToolbarInfo *toolbarinfo)
 {
-  GtkWidget *hb;
-
-  g_return_if_fail(app != NULL);
-  g_return_if_fail(GNOME_IS_APP(app));
-  g_return_if_fail(app->toolbar == NULL);
-
-  hb = gtk_handle_box_new();
-  gtk_widget_show(hb);
-  app->toolbar = gtk_toolbar_new(GTK_ORIENTATION_HORIZONTAL,
-				 GTK_TOOLBAR_BOTH);
-  gtk_signal_connect(GTK_OBJECT(app->toolbar), "button_press_event",
-		     GTK_SIGNAL_FUNC(gnome_app_rightclick_event), app);
-  gtk_widget_show(app->toolbar);
-  gtk_container_add(GTK_CONTAINER(hb), app->toolbar);
-
-  if(toolbarinfo)
-    gnome_app_do_toolbar_creation(app, app->toolbar, toolbarinfo);
-
-  gnome_app_set_positions(app,
-			  POS_NOCHANGE,
-			  POS_BOTTOM);
+	GtkWidget *hb;
+	
+	g_return_if_fail(app != NULL);
+	g_return_if_fail(GNOME_IS_APP(app));
+	g_return_if_fail(app->toolbar == NULL);
+	
+	gnome_app_set_toolbar (app, GTK_TOOLBAR (
+		gtk_toolbar_new (GTK_ORIENTATION_HORIZONTAL, GTK_TOOLBAR_BOTH)));
+	
+	if(toolbarinfo)
+		gnome_app_do_toolbar_creation(app, app->toolbar, toolbarinfo);
 }
 
 void
-gnome_app_set_positions(GnomeApp *app,
-			GnomeAppWidgetPositionType pos_menubar,
-			GnomeAppWidgetPositionType pos_toolbar)
+gnome_app_menu_set_position(GnomeApp *app, GnomeAppWidgetPositionType pos_menubar)
 {
-  g_return_if_fail(app != NULL);
-  g_return_if_fail(GNOME_IS_APP(app));
-
-  if(pos_menubar != POS_NOCHANGE)
-    {
-      g_return_if_fail(app->menubar != NULL);
-      g_return_if_fail(pos_menubar == POS_TOP
-		       || pos_menubar == POS_BOTTOM);
-
-      app->pos_menubar = pos_menubar;
-
-      /* It's ->parent->parent because this is inside a GtkHandleBox */
-      if(app->menubar->parent->parent)
-	gtk_container_remove(GTK_CONTAINER(app->menubar->parent->parent),
-			     app->menubar->parent);
-      /* Obviously the menu bar can't have vertical orientation,
-	 so we don't support POS_LEFT or POS_RIGHT. */
-      gtk_table_attach_defaults(GTK_TABLE(app->table),
-				app->menubar->parent,
-				0, 3,
-				(pos_menubar==POS_TOP)?0:2,
-				(pos_menubar==POS_TOP)?1:3);
-    }
-
-  if(pos_toolbar != POS_NOCHANGE)
-    {
-      g_return_if_fail(app->toolbar != NULL);
-
-      app->pos_toolbar = pos_toolbar;
-
-      /* It's ->parent->parent because this is inside a GtkHandleBox */
-      if(app->toolbar->parent->parent)
-	gtk_container_remove(GTK_CONTAINER(app->toolbar->parent->parent),
-			     app->toolbar->parent);
-      if(pos_toolbar == POS_LEFT
-	 || pos_toolbar == POS_RIGHT)
+	g_return_if_fail(app != NULL);
+	g_return_if_fail(GNOME_IS_APP(app));
+
+	g_return_if_fail(app->menubar != NULL);
+	g_return_if_fail(pos_menubar == GNOME_APP_POS_TOP || pos_menubar == GNOME_APP_POS_BOTTOM);
+	
+	app->pos_menubar = pos_menubar;
+	
+	/* It's ->parent->parent because this is inside a GtkHandleBox */
+	if(app->menubar->parent->parent)
+		gtk_container_remove(GTK_CONTAINER(app->menubar->parent->parent),
+				     app->menubar->parent);
+	/* Obviously the menu bar can't have vertical orientation,
+	   so we don't support POS_LEFT or POS_RIGHT. */
+	gtk_table_attach_defaults(GTK_TABLE(app->table),
+				  app->menubar->parent,
+				  0, 3,
+				  (pos_menubar == GNOME_APP_POS_TOP)?0:2,
+				  (pos_menubar == GNOME_APP_POS_TOP)?1:3);
+	
+	/* Repack any contents of ours */
+	if(app->contents) 
+		gnome_app_set_contents(app, app->contents);
+
+	/* Save the new setting */
+	gnome_config_push_prefix (app->prefix);
+	gnome_config_set_string ("Placement/Menu", locations [pos_menubar]);
+	gnome_config_pop_prefix ();
+	gnome_config_sync ();
+}
+
+void
+gnome_app_toolbar_set_position(GnomeApp *app, GnomeAppWidgetPositionType pos_toolbar)
+{
+	g_return_if_fail(app->toolbar != NULL);
+	
+	app->pos_toolbar = pos_toolbar;
+	
+	/* It's ->parent->parent because this is inside a GtkHandleBox */
+	if(app->toolbar->parent->parent)
+		gtk_container_remove(GTK_CONTAINER(app->toolbar->parent->parent),
+				     app->toolbar->parent);
+	if(pos_toolbar == GNOME_APP_POS_LEFT || pos_toolbar == GNOME_APP_POS_RIGHT)
 	{
-	  gtk_toolbar_set_orientation(GTK_TOOLBAR(app->toolbar),
-				      GTK_ORIENTATION_VERTICAL);
-	  gtk_table_attach_defaults(GTK_TABLE(app->table),
-				    app->toolbar->parent,
-				    (pos_toolbar==POS_LEFT)?0:2,
-				    (pos_toolbar==POS_LEFT)?1:3,
-				    0, 3);
-	}
-      else
+		gtk_toolbar_set_orientation(GTK_TOOLBAR(app->toolbar),
+					    GTK_ORIENTATION_VERTICAL);
+		gtk_table_attach_defaults(GTK_TABLE(app->table),
+					  app->toolbar->parent,
+					  (pos_toolbar==GNOME_APP_POS_LEFT)?0:2,
+					  (pos_toolbar==GNOME_APP_POS_LEFT)?1:3,
+					  0, 3);
+		}
+	else
 	{
-	  gint moffset;
-
-	  if(app->pos_menubar == pos_toolbar)
-	    moffset = (pos_toolbar == POS_TOP)?1:-1;
-	  else
-	    moffset = 0;
-	  /* assume POS_TOP || POS_BOTTOM */
-	  gtk_toolbar_set_orientation(GTK_TOOLBAR(app->toolbar),
-				      GTK_ORIENTATION_HORIZONTAL);
-	  gtk_table_attach_defaults(GTK_TABLE(app->table),
-				    app->toolbar->parent,
-				    0, 3,
-				    (pos_toolbar==POS_TOP)?0:2 + moffset,
-				    (pos_toolbar==POS_TOP)?1:3 + moffset);
+		gint moffset;
+		
+		if(app->pos_menubar == pos_toolbar)
+			moffset = (pos_toolbar == GNOME_APP_POS_TOP)?1:-1;
+		else
+			moffset = 0;
+		/* assume GNOME_APP_POS_TOP || GNOME_APP_POS_BOTTOM */
+		gtk_toolbar_set_orientation(GTK_TOOLBAR(app->toolbar),
+					    GTK_ORIENTATION_HORIZONTAL);
+		gtk_table_attach_defaults(GTK_TABLE(app->table),
+					  app->toolbar->parent,
+					  0, 3,
+					  (pos_toolbar==GNOME_APP_POS_TOP)?0:2 + moffset,
+					  (pos_toolbar==GNOME_APP_POS_TOP)?1:3 + moffset);
 	}
-    }
-  if(app->contents) /* Repack any contents of ours */
-    gnome_app_set_contents(app, app->contents);
+	
+	/* Repack any contents of ours */	
+	if(app->contents)
+		gnome_app_set_contents(app, app->contents);
+	
+	/* Save the new setting */
+	gnome_config_push_prefix (app->prefix);
+	gnome_config_set_string ("Placement/Toolbar", locations [pos_toolbar]);
+	gnome_config_pop_prefix ();
+	gnome_config_sync ();
 }
 
 /* These are used for knowing where to pack the contents into the
    table, so we don't have to recompute every time we set_contents */
 gint startys[2][4] = {
-  {2, 1, 1, 1},
-  {1, 0, 0, 0}
+	{2, 1, 1, 1},
+	{1, 0, 0, 0}
 };
 gint startxs[2][4] = {
-  {0, 0, 1, 0},
-  {0, 0, 1, 0}
+	{0, 0, 1, 0},
+	{0, 0, 1, 0}
 };
 gint endys[2][4] = {
-  {3, 2, 3, 3},
-  {2, 1, 2, 2}
+	{3, 2, 3, 3},
+	{2, 1, 2, 2}
 };
 gint endxs[2][4] = {
-  {3, 3, 3, 2},
-  {3, 3, 3, 2}
+	{3, 3, 3, 2},
+	{3, 3, 3, 2}
 };
 
 void
 gnome_app_set_contents(GnomeApp *app, GtkWidget *contents)
 {
-  g_return_if_fail(app != NULL);
-  g_return_if_fail(GNOME_IS_APP(app));
+	g_return_if_fail(app != NULL);
+	g_return_if_fail(GNOME_IS_APP(app));
 
-  if(app->contents != NULL)
-    gtk_container_remove(GTK_CONTAINER(app->table), app->contents);
+	if(app->contents != NULL)
+		gtk_container_remove(GTK_CONTAINER(app->table), app->contents);
   
-  /* Is this going to work at all? I'll wager not
-     XXX oops it worked, my mistake :) */
-  gtk_table_attach_defaults(GTK_TABLE(app->table),
-			    contents,
-			    startxs[app->pos_menubar][app->pos_toolbar],
-			    endxs[app->pos_menubar][app->pos_toolbar],
-			    startys[app->pos_menubar][app->pos_toolbar],
-			    endys[app->pos_menubar][app->pos_toolbar]);
-  app->contents = contents;
-  gtk_widget_show(contents);
+	/* Is this going to work at all? I'll wager not
+	   XXX oops it worked, my mistake :) */
+	gtk_table_attach_defaults(GTK_TABLE(app->table),
+				  contents,
+				  startxs[app->pos_menubar][app->pos_toolbar],
+				  endxs[app->pos_menubar][app->pos_toolbar],
+				  startys[app->pos_menubar][app->pos_toolbar],
+				  endys[app->pos_menubar][app->pos_toolbar]);
+	app->contents = contents;
+	gtk_widget_show(contents);
 }
 
 static GtkWidget *rmb_menu = NULL, *clicked_widget = NULL;
@@ -315,137 +335,147 @@ static GtkWidget *menuitems[4];
 
 static void make_rmb_menu(GnomeApp *app)
 {
-  int i;
-
-  rmb_menu = gtk_menu_new();
-
-  menuitems[0] = gtk_menu_item_new_with_label("Top");
-  menuitems[1] = gtk_menu_item_new_with_label("Bottom");
-  menuitems[2] = gtk_menu_item_new_with_label("Left");
-  menuitems[3] = gtk_menu_item_new_with_label("Right");
-  for(i = 0; i < 4; i++)
-    {
-      gtk_widget_show(menuitems[i]);
-      gtk_menu_append(GTK_MENU(rmb_menu), menuitems[i]);
-      gtk_signal_connect(GTK_OBJECT(menuitems[i]), "activate",
-			 GTK_SIGNAL_FUNC(gnome_app_setpos_activate), app);
-    }
+	int i;
+
+	rmb_menu = gtk_menu_new();
+
+	menuitems[0] = gtk_menu_item_new_with_label("Top");
+	menuitems[1] = gtk_menu_item_new_with_label("Bottom");
+	menuitems[2] = gtk_menu_item_new_with_label("Left");
+	menuitems[3] = gtk_menu_item_new_with_label("Right");
+	
+	for(i = 0; i < 4; i++){
+		gtk_widget_show(menuitems[i]);
+		gtk_menu_append(GTK_MENU(rmb_menu), menuitems[i]);
+		gtk_signal_connect(GTK_OBJECT(menuitems[i]), "activate",
+				   GTK_SIGNAL_FUNC(gnome_app_setpos_activate), app);
+	}
 }
 
 static void gnome_app_rightclick_event(GtkWidget *widget,
 				       GdkEventButton *event,
 				       GnomeApp *app)
 {
-  int i;
-  g_return_if_fail(app != NULL);
-  g_return_if_fail(GNOME_IS_APP(app));
-
-  if(rmb_menu == NULL) make_rmb_menu(app);
-
-  if(GTK_WIDGET_VISIBLE(rmb_menu))
-    gtk_menu_popdown(GTK_MENU(rmb_menu));
-
-  if(event->button != 3)
-    return;
-
-  if(widget == app->menubar)
-    {
-      for(i = 0; i < 4; i++)
-	gtk_widget_set_sensitive(menuitems[i],
-				 (i >= 2)?FALSE:(!(app->pos_menubar==i)));
-    }
-  else
-    {
-      for(i = 0; i < 4; i++)
-	gtk_widget_set_sensitive(menuitems[0],
-				 !(app->pos_toolbar==i));
-    }
-  gtk_menu_popup(GTK_MENU(rmb_menu),
-		 NULL, NULL, NULL, NULL,
-		 event->button,
-		 GDK_CURRENT_TIME);
-  clicked_widget = widget;
+	int i;
+	g_return_if_fail(app != NULL);
+	g_return_if_fail(GNOME_IS_APP(app));
+
+	if(rmb_menu == NULL) make_rmb_menu(app);
+
+	if(GTK_WIDGET_VISIBLE(rmb_menu))
+		gtk_menu_popdown(GTK_MENU(rmb_menu));
+
+	if(event->button != 3)
+		return;
+
+	if(widget == app->menubar){
+		for(i = 0; i < 4; i++)
+			gtk_widget_set_sensitive(menuitems[i],
+						 (i >= 2)?FALSE:(!(app->pos_menubar==i)));
+	} else {
+		for(i = 0; i < 4; i++)
+			gtk_widget_set_sensitive(menuitems[0],
+						 !(app->pos_toolbar==i));
+	}
+	gtk_menu_popup(GTK_MENU(rmb_menu),
+		       NULL, NULL, NULL, NULL,
+		       event->button,
+		       GDK_CURRENT_TIME);
+	clicked_widget = widget;
 }
 
 static void
 gnome_app_setpos_activate(GtkMenuItem *menu_item,
 			  GnomeApp *app)
 {
-  int i;
-  g_return_if_fail(clicked_widget != NULL);
-  g_return_if_fail(app != NULL);
-  g_return_if_fail(GNOME_IS_APP(app));
-
-  gtk_menu_popdown(GTK_MENU(rmb_menu));
-  if(clicked_widget == app->menubar)
-    {
-      for(i = 0; i < 2; i++) /* We only go through the 1st two
-				since a menubar can only go top
-				or bottom */
-	if((gpointer)menu_item == (gpointer)menuitems[i])
-	  {
-	    gnome_app_set_positions(app, i, POS_NOCHANGE);
-	    break;
-	  }
-    }
-  else if(clicked_widget == app->toolbar)
-    {
-      for(i = 0; i < 4; i++)
-	if((gpointer)menu_item == (gpointer)menuitems[i])
-	  {
-	    gnome_app_set_positions(app, POS_NOCHANGE, i);
-	    break;
-	  }
-    }
-
-  clicked_widget = NULL;
+	int i;
+	g_return_if_fail(clicked_widget != NULL);
+	g_return_if_fail(app != NULL);
+	g_return_if_fail(GNOME_IS_APP(app));
+
+	gtk_menu_popdown(GTK_MENU(rmb_menu));
+	if(clicked_widget == app->menubar){
+		for(i = 0; i < 2; i++) /* We only go through the 1st two
+					  since a menubar can only go top
+					  or bottom */
+			if((gpointer)menu_item == (gpointer)menuitems[i]){
+				gnome_app_menu_set_position (app, i);
+				break;
+			}
+	}
+	else if(clicked_widget == app->toolbar){
+		for(i = 0; i < 4; i++)
+			if((gpointer)menu_item == (gpointer)menuitems[i]){
+				gnome_app_toolbar_set_position(app, i);
+				break;
+			}
+	}
+
+	clicked_widget = NULL;
 }
 
 void gnome_app_set_menus     (GnomeApp *app,
 			      GtkMenuBar *menubar)
 {
-  GtkWidget *hb;
-
-  g_return_if_fail(app != NULL);
-  g_return_if_fail(GNOME_IS_APP(app));
-  g_return_if_fail(app->menubar == NULL);
-  g_return_if_fail(menubar != NULL);
-  g_return_if_fail(GTK_IS_MENU_BAR(menubar));
-
-  hb = gtk_handle_box_new();
-  gtk_widget_show(hb);
-  app->menubar = GTK_WIDGET(menubar);
-
-  gtk_signal_connect(GTK_OBJECT(app->menubar), "button_press_event",
-		     GTK_SIGNAL_FUNC(gnome_app_rightclick_event), app);
-  gtk_widget_show(app->menubar);
-  gtk_container_add(GTK_CONTAINER(hb), app->menubar);
-
-  gnome_app_set_positions(app,
-			  POS_TOP,
-			  POS_NOCHANGE);  
+	GnomeAppWidgetPositionType pos;
+	GtkWidget *hb;
+	char *location;
+
+	g_return_if_fail(app != NULL);
+	g_return_if_fail(GNOME_IS_APP(app));
+	g_return_if_fail(app->menubar == NULL);
+	g_return_if_fail(menubar != NULL);
+	g_return_if_fail(GTK_IS_MENU_BAR(menubar));
+
+	hb = gtk_handle_box_new();
+	gtk_widget_show(hb);
+	app->menubar = GTK_WIDGET(menubar);
+
+	gtk_signal_connect(GTK_OBJECT(app->menubar), "button_press_event",
+			   GTK_SIGNAL_FUNC(gnome_app_rightclick_event), app);
+	gtk_widget_show(app->menubar);
+	gtk_container_add(GTK_CONTAINER(hb), app->menubar);
+
+	/* Load the position from the configuration file */
+	gnome_config_push_prefix (app->prefix);
+	location = gnome_config_get_string ("Placement/Menu=top");
+	pos = get_orientation (location);
+
+	/* Menus can not go on left or right */
+	if (pos == GNOME_APP_POS_LEFT || pos == GNOME_APP_POS_RIGHT)
+		pos = GNOME_APP_POS_TOP;
+	gnome_app_menu_set_position (app, pos);
+	free (location);
+	gnome_config_pop_prefix ();
 }
 
 void gnome_app_set_toolbar   (GnomeApp *app,
 			      GtkToolbar *toolbar)
 {
-  GtkWidget *hb;
-
-  g_return_if_fail(app != NULL);
-  g_return_if_fail(GNOME_IS_APP(app));
-  g_return_if_fail(toolbar != NULL);
-  g_return_if_fail(app->toolbar == NULL);
-  g_return_if_fail(GTK_IS_TOOLBAR(toolbar));
-
-  hb = gtk_handle_box_new();
-  gtk_widget_show(hb);
-  app->toolbar = GTK_WIDGET(toolbar);
-  gtk_signal_connect(GTK_OBJECT(app->toolbar), "button_press_event",
-		     GTK_SIGNAL_FUNC(gnome_app_rightclick_event), app);
-  gtk_widget_show(app->toolbar);
-  gtk_container_add(GTK_CONTAINER(hb), app->toolbar);
-
-  gnome_app_set_positions(app,
-			  POS_NOCHANGE,
-			  POS_BOTTOM);  
+	GnomeAppWidgetPositionType pos;
+	GtkWidget *hb;
+	char *location;
+
+	g_return_if_fail(app != NULL);
+	g_return_if_fail(GNOME_IS_APP(app));
+	g_return_if_fail(toolbar != NULL);
+	g_return_if_fail(app->toolbar == NULL);
+	g_return_if_fail(GTK_IS_TOOLBAR(toolbar));
+
+	hb = gtk_handle_box_new();
+	gtk_widget_show(hb);
+	app->toolbar = GTK_WIDGET(toolbar);
+	gtk_signal_connect(GTK_OBJECT(app->toolbar), "button_press_event",
+			   GTK_SIGNAL_FUNC(gnome_app_rightclick_event), app);
+	gtk_widget_show(app->toolbar);
+	gtk_container_add(GTK_CONTAINER(hb), app->toolbar);
+
+	/* Load the position from the configuration file */
+	gnome_config_push_prefix (app->prefix);
+	location = gnome_config_get_string ("Placement/Toolbar=top");
+	pos = get_orientation (location);
+	gnome_app_menu_set_position (app, pos);
+	free (location);
+	gnome_config_pop_prefix ();
 }
+
diff --git a/libgnomeui/gnome-app.h b/libgnomeui/gnome-app.h
index b33ea84..5f2f566 100644
--- a/libgnomeui/gnome-app.h
+++ b/libgnomeui/gnome-app.h
@@ -7,98 +7,127 @@
 
 BEGIN_GNOME_DECLS
 
-#define GNOME_APP(obj) GTK_CHECK_CAST(obj, gnome_app_get_type(), GnomeApp)
+#define GNOME_APP(obj)         GTK_CHECK_CAST(obj, gnome_app_get_type(), GnomeApp)
 #define GNOME_APP_CLASS(class) GTK_CHECK_CAST_CLASS(class, gnome_app_get_type(), GnomeAppClass)
-#define GNOME_IS_APP(obj) GTK_CHECK_TYPE(obj, gnome_app_get_type())
+#define GNOME_IS_APP(obj)      GTK_CHECK_TYPE(obj, gnome_app_get_type())
 
-typedef struct _GnomeApp GnomeApp;
-typedef struct _GnomeAppClass GnomeAppClass;
+typedef struct _GnomeApp       GnomeApp;
+typedef struct _GnomeAppClass  GnomeAppClass;
 
 typedef enum 
 {
-  POS_NOCHANGE = -1,
-  POS_TOP = 0,
-  POS_BOTTOM = 1,
-  POS_LEFT = 2,
-  POS_RIGHT = 3,
+	GNOME_APP_POS_TOP,
+	GNOME_APP_POS_BOTTOM,
+	GNOME_APP_POS_LEFT,
+	GNOME_APP_POS_RIGHT,
+	GNOME_APP_POS_FLOATING,
 } GnomeAppWidgetPositionType;
 
 typedef enum
 {
-  GAPP_MENUBAR = 1,
-  GAPP_TOOLBAR = 2,
+	GNOME_APP_MENUBAR = 1,
+	GNOME_APP_TOOLBAR = 2,
 } GnomeAppWidgetType;
 
 struct _GnomeMenuInfo {
-  enum { MI_ENDOFINFO, MI_ITEM, MI_SUBMENU } type;
-  gchar *label;
-  gpointer moreinfo; /* For a menuitem, this should point to the
-		        procedure to be called when this menu item is
-		        activated.
-
-		        For a submenu, it should point to the
-		        GnomeMenuInfo array for that menu. */
-  GtkWidget *widget; /* This is filled in by gnome_app_create_menu() */
+	enum {
+		GNOME_APP_MENU_ENDOFINFO,
+		GNOME_APP_MENU_ITEM,
+		GNOME_APP_MENU_SUBMENU
+	} type;
+	gchar *label;
+	gpointer moreinfo; /* For a menuitem, this should point to the
+			      procedure to be called when this menu item is
+			      activated.
+			      
+			      For a submenu, it should point to the
+			      GnomeMenuInfo array for that menu. */
+	GtkWidget *widget; /* This is filled in by gnome_app_create_menu() */
 };
 
 typedef struct _GnomeMenuInfo GnomeMenuInfo;
 
 struct _GnomeToolbarInfo {
-  enum { TBI_ENDOFINFO, TBI_ITEM, TBI_SPACE } type;
-  /* You can leave the rest of these to NULL or whatever if this is an
-     TBI_SPACE */
-  gchar *text;
-  gchar *tooltip_text;
-  enum { PMAP_NONE, PMAP_DATA, PMAP_FILENAME } pixmap_type;
-  gpointer pixmap_info; /* Either a pointer to the char ** for the pixmap
-			   (for PMAP_DATA)
-			   or a char * for the filename (PMAP_FILENAME) */
-  gpointer clicked_callback; /* Useful for TB_ITEMs only,
-				it's the GtkSignalFunc */
+	enum {
+		GNOME_APP_TOOLBAR_ENDOFINFO,
+		GNOME_APP_TOOLBAR_ITEM,
+		GNOME_APP_TOOLBAR_SPACE
+	} type;
+	
+	/* You can leave the rest of these to NULL or whatever if this is an
+	 * GNOME_APP_TOOLBAR_SPACE
+	 */
+	
+	gchar *text;
+	gchar *tooltip_text;
+	enum {
+		GNOME_APP_PIXMAP_NONE,
+		GNOME_APP_PIXMAP_DATA,
+		GNOME_APP_PIXMAP_FILENAME
+	} pixmap_type;
+	
+	/* Either a pointer to the char 
+	 *  for the pixmap
+	 * (for PMAP_DATA) or a char * for the filename
+	 * (PMAP_FILENAME)
+	 */
+	gpointer pixmap_info;
+
+	/* Useful for TB_ITEMs only,
+	 *  it's the GtkSignalFunc
+	 */
+	gpointer clicked_callback; 
 };
 typedef struct _GnomeToolbarInfo GnomeToolbarInfo;
 
 /* Everything gets put into a table that looks like:
-
-   XXX
-   ABC
-   YYY
-
-   There's one table element on top, three in the middle, and one on
-   the bottom.
-
-   Obviously you can change the positions of things as needed
-   using the supplied function.
+ *
+ * XXX
+ * ABC
+ * YYY
+ *
+ * There's one table element on top, three in the middle, and one on
+ * the bottom.
+ *
+ * Obviously you can change the positions of things as needed
+ * using the supplied function.
  */
 struct _GnomeApp {
-  GtkWindow parent_object;
-  GtkWidget *menubar /* GtkMenuBar */,
-    *toolbar /* GtkToolbar */,
-    *contents /* GtkContainer */;
-  GtkWidget *table; /* The table widgets that hold & pack it all */
-  GnomeAppWidgetPositionType pos_menubar, pos_toolbar;
+	GtkWindow parent_object;
+	char     *name;		/* Application name */
+	char     *prefix;	/* gnome config prefix */
+	GtkWidget *menubar;	/* The MenuBar */
+	GtkWidget *toolbar;	/* The Toolbar */
+	GtkWidget *contents;	/* The contents */
+	
+	GtkWidget *table;	/* The table widget that ties them all */
+	
+	/* Positions for the menubar and the toolbar */
+	GnomeAppWidgetPositionType pos_menubar, pos_toolbar;
 };
 
 struct _GnomeAppClass {
-  GtkWindowClass parent_class;
+	GtkWindowClass parent_class;
 };
 
-guint gnome_app_get_type    (void);
-GtkWidget *gnome_app_new    (gchar *appname);
-/* You can OR the various enums here to have more than one piece
-   created at once */
-void gnome_app_create_menus  (GnomeApp *app,
-			      GnomeMenuInfo *menuinfo);
-void gnome_app_create_toolbar(GnomeApp *app,
-			      GnomeToolbarInfo *tbinfo);
-void gnome_app_set_menus     (GnomeApp *app,
-			      GtkMenuBar *menubar);
-void gnome_app_set_toolbar   (GnomeApp *app,
-			      GtkToolbar *toolbar);
-void gnome_app_set_contents  (GnomeApp *app, GtkWidget *contents);
-void gnome_app_set_positions (GnomeApp *app,
-			      GnomeAppWidgetPositionType pos_menubar,
-			      GnomeAppWidgetPositionType pos_toolbar);
+guint gnome_app_get_type      (void);
+GtkWidget *gnome_app_new      (gchar *appname, char *title);
+
+void gnome_app_create_menus         (GnomeApp *app,
+			             GnomeMenuInfo *menuinfo);
+void gnome_app_create_toolbar       (GnomeApp *app,
+			             GnomeToolbarInfo *tbinfo);
+void gnome_app_set_menus            (GnomeApp *app,
+			             GtkMenuBar *menubar);
+void gnome_app_set_toolbar          (GnomeApp *app,
+			             GtkToolbar *toolbar);
+void gnome_app_set_contents         (GnomeApp *app,
+			             GtkWidget *contents);
+void gnome_app_toolbar_set_position (GnomeApp *app,
+				     GnomeAppWidgetPositionType pos_toolbar);
+
+void gnome_app_menu_set_position    (GnomeApp *app,
+				     GnomeAppWidgetPositionType pos_menu);
 
 END_GNOME_DECLS
 



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