Icons for components



I've made and attached a patch to bonobo 0.37 that adds the ability
to apply an "icon" property to bonobo components. The icon will
be shown instead of the standard "tile" image in the components
selector.

(I tested this by adding the following tag to a bonobo oaf file:
<oaf_attribute name="icon" type="string" value="gnome-chess.png"/>)

BTW: The URL of this list's archive in README is wrong. I've found
the archive at http://mail.gnome.org/archives/gnome-components-list/ .

 - Sebastian
diff -u --recursive bonobo-0.37/bonobo/bonobo-object-directory.c bonobo-0.37.new/bonobo/bonobo-object-directory.c
--- bonobo-0.37/bonobo/bonobo-object-directory.c	Fri Feb  9 06:32:14 2001
+++ bonobo-0.37.new/bonobo/bonobo-object-directory.c	Mon Mar  5 03:43:30 2001
@@ -25,12 +25,14 @@
         gchar* iid;
 	gchar* name;
         gchar* desc;
+	gchar* icon;
 };
 
 ODServerInfo*
 bonobo_directory_new_server_info (const gchar *iid,
 				  const gchar *name,
-				  const gchar *desc)
+				  const gchar *desc,
+				  const gchar *icon)
 {
         ODServerInfo *info;
 
@@ -40,6 +42,7 @@
         info->iid = iid ? g_strdup (iid) : NULL;
 	info->name = name ? g_strdup (name) : NULL;
         info->desc = desc ? g_strdup (desc) : NULL;
+	info->icon = icon ? g_strdup (icon) : NULL;
 
         return info;
 }
@@ -62,6 +65,12 @@
         return info->desc;
 }
 
+const gchar*
+bonobo_directory_get_server_info_icon (ODServerInfo *info)
+{
+	return info->icon;
+}
+
 void
 bonobo_directory_server_info_ref (ODServerInfo *info)
 {
@@ -80,6 +89,7 @@
                 g_free (info->iid);
 		g_free (info->name);
                 g_free (info->desc);
+		g_free (info->icon);
                 g_free (info);
         }
 }
@@ -165,7 +175,7 @@
 	for (i = 0; i < servers->_length; i++) {
                 OAF_ServerInfo *oafinfo = &servers->_buffer[i];
                 ODServerInfo *info;
-		gchar *name = NULL, *desc = NULL;
+		gchar *name = NULL, *desc = NULL, *icon = NULL;
 
 
 		for (j = 0; j < oafinfo->props._length; j++) {
@@ -178,6 +188,9 @@
 
 			else if (strcmp (oafinfo->props._buffer[j].name, "description") == 0)
 				desc = oafinfo->props._buffer[j].v._u.value_string;
+
+			else if (strcmp (oafinfo->props._buffer[j].name, "icon") == 0)
+				icon = oafinfo->props._buffer[j].v._u.value_string;
 		}
 
 		/*
@@ -193,10 +206,11 @@
 
 		if (!desc)
 			desc = name;
-		
+
                 info = bonobo_directory_new_server_info (oafinfo->iid,
 					   name,
-					   desc);
+					   desc,
+					   icon);
 
                 retval = g_list_prepend (retval, info);
         }
diff -u --recursive bonobo-0.37/bonobo/bonobo-object-directory.h bonobo-0.37.new/bonobo/bonobo-object-directory.h
--- bonobo-0.37/bonobo/bonobo-object-directory.h	Fri Feb  9 06:32:26 2001
+++ bonobo-0.37.new/bonobo/bonobo-object-directory.h	Mon Mar  5 03:43:55 2001
@@ -39,10 +39,12 @@
 
 ODServerInfo        *bonobo_directory_new_server_info             (const gchar       *iid,
 						     const gchar       *name,
-                                                     const gchar       *desc);
+                                                     const gchar       *desc,
+						     const gchar       *icon);
 const gchar         *bonobo_directory_get_server_info_id          (ODServerInfo      *info);
 const gchar         *bonobo_directory_get_server_info_name        (ODServerInfo      *info);
 const gchar         *bonobo_directory_get_server_info_description (ODServerInfo      *info);
+const gchar         *bonobo_directory_get_server_info_icon        (ODServerInfo      *info);
 void                 bonobo_directory_server_info_ref             (ODServerInfo      *info);
 void                 bonobo_directory_server_info_unref           (ODServerInfo      *info);
 
diff -u --recursive bonobo-0.37/bonobo/bonobo-selector-widget.c bonobo-0.37.new/bonobo/bonobo-selector-widget.c
--- bonobo-0.37/bonobo/bonobo-selector-widget.c	Fri Feb  9 06:32:17 2001
+++ bonobo-0.37.new/bonobo/bonobo-selector-widget.c	Mon Mar  5 04:01:19 2001
@@ -40,6 +40,7 @@
 
 struct _BonoboSelectorWidgetPrivate {
 	GtkWidget    *clist;
+	GtkWidget    *icon;
 	GtkWidget    *desc_label;
 	GList        *servers;
 };
@@ -188,11 +189,20 @@
 
 	} else {
 		GtkCListClass *cl;
-		gchar *text;
+		gchar *text, *icon;
 		
 		gtk_clist_get_text (GTK_CLIST (clist), row,
 				    2, &text);
 		gtk_label_set_text (GTK_LABEL (sel->priv->desc_label), text);
+
+		gtk_clist_get_text (GTK_CLIST (clist), row,
+				    3, &icon);
+		if (strcmp (icon, ""))
+			gnome_pixmap_load_file (GNOME_PIXMAP (sel->priv->icon),
+						icon);
+		else
+			gnome_pixmap_load_xpm_d (GNOME_PIXMAP (sel->priv->icon),
+						 bonobo_insert_component_xpm);
 		
 		cl = gtk_type_class (GTK_TYPE_CLIST);
 
@@ -205,11 +215,11 @@
 bonobo_selector_widget_init (GtkWidget *widget)
 {
 	BonoboSelectorWidget *sel = BONOBO_SELECTOR_WIDGET (widget);
-	GtkWidget *scrolled, *pixmap;
+	GtkWidget *scrolled;
 	GtkWidget *hbox;
 	GtkWidget *frame;
 	BonoboSelectorWidgetPrivate *priv;
-	gchar *titles [] = { N_("Name"), "Description", "ID", NULL };
+	gchar *titles [] = { N_("Name"), "Description", "ID", "Icon", NULL };
 	
 	g_return_if_fail (sel != NULL);
 
@@ -220,13 +230,14 @@
 	gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled),
 		GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC);
 
-	priv->clist = gtk_clist_new_with_titles (3, titles);
+	priv->clist = gtk_clist_new_with_titles (4, titles);
 	gtk_clist_set_selection_mode (GTK_CLIST (priv->clist),
 		GTK_SELECTION_BROWSE);
 	gtk_signal_connect (GTK_OBJECT (priv->clist), "select-row",
 			    GTK_SIGNAL_FUNC (select_row), sel);
 	gtk_clist_set_column_visibility (GTK_CLIST (priv->clist), 1, FALSE);
 	gtk_clist_set_column_visibility (GTK_CLIST (priv->clist), 2, FALSE);
+	gtk_clist_set_column_visibility (GTK_CLIST (priv->clist), 3, FALSE);
 	gtk_clist_column_titles_passive (GTK_CLIST (priv->clist));
 
 	gtk_container_add (GTK_CONTAINER (scrolled), priv->clist);
@@ -243,8 +254,8 @@
 
 	hbox = gtk_hbox_new (FALSE, 0);
 
-	pixmap = gnome_pixmap_new_from_xpm_d (bonobo_insert_component_xpm);
-	gtk_box_pack_start (GTK_BOX (hbox), pixmap, FALSE, TRUE, GNOME_PAD_SMALL);
+	priv->icon = gnome_pixmap_new_from_xpm_d (bonobo_insert_component_xpm);
+	gtk_box_pack_start (GTK_BOX (hbox), priv->icon, FALSE, TRUE, GNOME_PAD_SMALL);
 	
 	gtk_box_pack_start (GTK_BOX (hbox), priv->desc_label, TRUE, TRUE, GNOME_PAD_SMALL);
 	gtk_container_add (GTK_CONTAINER (frame), hbox);
@@ -276,12 +287,15 @@
 		GList *l;
 
 		for (l = servers; l; l = l->next) {
-			const gchar *text [4];
+			const gchar *icon;
+			const gchar *text [5];
 
 			text [0] = bonobo_directory_get_server_info_name (l->data);
 			text [1] = bonobo_directory_get_server_info_id   (l->data);
 			text [2] = bonobo_directory_get_server_info_description (l->data);
-			text [3] = NULL;
+			icon     = bonobo_directory_get_server_info_icon (l->data);
+			text [3] = icon ? icon : "";
+			text [4] = NULL;
 			
 			gtk_clist_append (GTK_CLIST (priv->clist), (gchar **) text);
 		}


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