Re: [PATCH] Scaffold -- Added tooltips and file modified flag into document-manager

Jeroen Zwartepoorte <[email protected]>
Newsgroups gmane.comp.gnome.devtools
Message-ID <1062932262.1121.23.camel@orcrist>
I just committed a modified version of your patch (merged the
document_(un)modified methods calls with docman_doc_(un)modified:

2003-09-07  Rui Lopes  <[email protected]>

	* plugins/document-manager/scaffold-document-manager.c: Added tooltips
	to document-manager tabs that show the full filename.  Added a simple
	modified flag ('*') to document-manager tab when a file is modified.


See attached patch.

Thanks,

Jeroen

On Thu, 2003-09-04 at 13:31, Rui Lopes wrote:
> Hi all,
> 
> 
> On Qua, 2003-09-03 at 16:59, Rui Lopes wrote: 
> > Some more things for Scaffold:
> > 
> > * Added tooltips to document-manager tabs that show the full filename.
> > * Added a simple modified flag ('*') to document-manager tab when a file
> > is modified.
> > 
> > 
> > Review my TODO and XXX comments and tell me what you think!
> 
> 
> Use the attached patch instead.  It adds two lines that I forgot, and
> also adds a ChangeLog entry.
> 
> 
> 
> Regards,
> Rui Lopes
docman.patch (text/x-patch, 10.5 KB)
? docman.patch
? plugins/project-manager/project-tool.loT
Index: ChangeLog
===================================================================
RCS file: /cvs/gnome/scaffold/ChangeLog,v
retrieving revision 1.274
diff -u -p -r1.274 ChangeLog
--- ChangeLog	7 Sep 2003 10:16:25 -0000	1.274
+++ ChangeLog	7 Sep 2003 10:49:26 -0000
@@ -1,5 +1,19 @@
 2003-09-07  Rui Lopes  <[email protected]>
 
+	* plugins/document-manager/scaffold-document-manager.c:
+	(scaffold_notebook_document_manager_new), (set_doc_uri),
+	(scaffold_notebook_document_manager_remove_doc), (add_doc),
+	(docman_dispose),
+	(scaffold_notebook_document_manager_instance_init),
+	(document_modified), (document_unmodified),
+	(scaffold_notebook_document_manager_get_prefs_page),
+	(scaffold_notebook_document_manager_open): Added tooltips to
+	document-manager tabs that show the full filename.  Added a
+	simple modified flag ('*') to document-manager tab when a
+	file is modified.
+
+2003-09-07  Rui Lopes  <[email protected]>
+
 	* data/Makefile.am: s/install-data-local/install-schemas. Fixes some
 	gconf installation problems.
 	* plugins/gnome-project-types/scaffold-gnome-application-type.c:
Index: plugins/document-manager/scaffold-document-manager.c
===================================================================
RCS file: /cvs/gnome/scaffold/plugins/document-manager/scaffold-document-manager.c,v
retrieving revision 1.32
diff -u -p -r1.32 scaffold-document-manager.c
--- plugins/document-manager/scaffold-document-manager.c	8 Aug 2003 20:44:19 -0000	1.32
+++ plugins/document-manager/scaffold-document-manager.c	7 Sep 2003 10:49:28 -0000
@@ -61,6 +61,8 @@ struct _ScaffoldNotebookDocumentManagerP
 	GHashTable *verbs;
 
 	GConfClient *client;
+
+	GtkTooltips *tooltips;
 };
 
 typedef struct {
@@ -101,7 +103,7 @@ scaffold_notebook_document_manager_new (
 	ScaffoldNotebookDocumentManager *dm;
 
 	dm = g_object_new (SCAFFOLD_TYPE_NOTEBOOK_DOCUMENT_MANAGER, NULL);
-
+ 
 	dm->ui_container = ui_container;
 	dm->ui_component = ui_component;
 
@@ -141,6 +143,7 @@ set_doc_uri (ScaffoldNotebookDocumentMan
 {
 	gchar *basename;
 	GdkPixbuf *pixbuf;
+	GtkWidget *tooltip;
 	GtkWidget *label;
 	GtkWidget *icon;
 
@@ -154,6 +157,10 @@ set_doc_uri (ScaffoldNotebookDocumentMan
 	gtk_label_set_text (GTK_LABEL (label), basename);
 	g_free (basename);
 
+	tooltip = g_object_get_data (G_OBJECT (document), 
+				   "ScaffoldNotebookDocumentManager::tooltip");
+	gtk_tooltips_set_tip (docman->priv->tooltips, tooltip, filename, NULL);
+
 	pixbuf = gdl_icons_get_uri_icon (docman->priv->icons, filename);
 	icon = g_object_get_data (G_OBJECT (document),
 				  "ScaffoldNotebookDocumentManager::icon");
@@ -179,9 +186,9 @@ scaffold_notebook_document_manager_remov
 
 		g_signal_emit_by_name (docman, "document_removed", document);
 
-		docman->documents = 
-			g_list_remove (docman->documents, document);
+		docman->documents = g_list_remove (docman->documents, document);
 	}
+
 	g_object_unref (document);
 }
 
@@ -263,12 +270,12 @@ close_document_cb (GtkButton *button,
 						      "text/plain",
 						      NULL);
 	}
-
 }
 
 static void
 add_doc (ScaffoldNotebookDocumentManager *docman, ScaffoldDocument *document)
 {
+	GtkWidget *event_box;
 	GtkWidget *tab_hbox;
 	GtkWidget *label;
 	GtkWidget *button;
@@ -289,7 +296,8 @@ add_doc (ScaffoldNotebookDocumentManager
 	if (uri) {
 		label_str = g_path_get_basename (uri);
 	} else {
-		label_str = g_strdup_printf ("Untitled %ld", ++docman->priv->untitled_count);
+		label_str = g_strdup_printf (_("Untitled %ld"),
+					     ++docman->priv->untitled_count);
 		SCAFFOLD_BONOBO_DOCUMENT (document)->untitled = TRUE;
 	}
 
@@ -310,15 +318,22 @@ add_doc (ScaffoldNotebookDocumentManager
 
 	label = gtk_label_new (label_str);
 	g_object_set_data (G_OBJECT (document),
-			   "ScaffoldNotebookDocumentManager::label", 
-			   label);
+			   "ScaffoldNotebookDocumentManager::label", label);
 	g_object_set_data (G_OBJECT (document),
-			   "ScaffoldNotebookDocumentManager::icon",
-			   icon);
+			   "ScaffoldNotebookDocumentManager::icon", icon);
 
 	g_free (label_str);
 
-	/* Build the tab widget close button */
+	/* Build the tab widgets and tooltip */
+	event_box = gtk_event_box_new ();
+	g_object_set_data (G_OBJECT (document),
+			   "ScaffoldNotebookDocumentManager::tooltip",
+			   event_box);
+
+	if (uri)
+		gtk_tooltips_set_tip (docman->priv->tooltips, event_box,
+				      uri, NULL);
+
 	tab_hbox = gtk_hbox_new (FALSE, 2);
 	pixmap = gtk_image_new_from_stock (GTK_STOCK_CLOSE, GTK_ICON_SIZE_MENU);;
 	button = gtk_button_new ();
@@ -326,8 +341,7 @@ add_doc (ScaffoldNotebookDocumentManager
 	gtk_container_add (GTK_CONTAINER (button), pixmap);
 	gtk_widget_set_size_request (button, 18, 18);
 
-	g_object_set_data (G_OBJECT (button), "document", 
-			   (gpointer) document);
+	g_object_set_data (G_OBJECT (button), "document", document);
 	g_signal_connect (G_OBJECT (button), "clicked",
 			  G_CALLBACK (close_document_cb), docman);
 
@@ -335,29 +349,23 @@ add_doc (ScaffoldNotebookDocumentManager
 	gtk_box_pack_start (GTK_BOX (tab_hbox), label, TRUE, FALSE, 0);
 	gtk_box_pack_end (GTK_BOX (tab_hbox), button, FALSE, FALSE, 0);
 
-	gtk_widget_show_all (tab_hbox);
+	gtk_container_add (GTK_CONTAINER (event_box), tab_hbox);
+	gtk_widget_show_all (event_box);
 
 	gtk_notebook_append_page (GTK_NOTEBOOK (docman),
-				  GTK_WIDGET (document), tab_hbox);
+				  GTK_WIDGET (document), event_box);
 	
-	/* Listen for changes */
-	g_signal_connect (document, "modified", 
-			  G_CALLBACK (docman_doc_modified), 
-			  docman);
-	g_signal_connect (document, "unmodified",
-			  G_CALLBACK (docman_doc_unmodified),
-			  docman);
-	g_signal_connect (document, "uri_changed",
-			  G_CALLBACK (docman_doc_uri_changed),
-			  docman);
-	
-
-	g_signal_connect (G_OBJECT(document), "destroy",
-			  G_CALLBACK (docman_doc_destroy),
-			  (gpointer) docman);
+	g_signal_connect (G_OBJECT (document), "modified", 
+			  G_CALLBACK (docman_doc_modified), docman);
+	g_signal_connect (G_OBJECT (document), "unmodified",
+			  G_CALLBACK (docman_doc_unmodified), docman);
+	g_signal_connect (G_OBJECT (document), "uri_changed",
+			  G_CALLBACK (docman_doc_uri_changed), docman);
+	g_signal_connect (G_OBJECT (document), "destroy",
+			  G_CALLBACK (docman_doc_destroy), docman);
 
 	gtk_widget_show (GTK_WIDGET (document));
-	gtk_widget_grab_focus (GTK_WIDGET(document));
+	gtk_widget_grab_focus (GTK_WIDGET (document));
 
 	/* Add the document to the recent files list. */
 	if (!scaffold_bonobo_document_is_untitled (SCAFFOLD_BONOBO_DOCUMENT (document)))
@@ -368,9 +376,8 @@ add_doc (ScaffoldNotebookDocumentManager
 		(SCAFFOLD_DOCUMENT_MANAGER (docman), document);
 
 	/* Well, it won't always set off the signal.  Not the first time. */
-	if (!docman->current_document) {
+	if (!docman->current_document)
 		set_current_document (docman, document);
-	}
 
 	g_signal_emit_by_name (docman, "document_added", document);
 }
@@ -410,6 +417,11 @@ docman_dispose (GObject *object)
 		g_list_free (docman->documents);
 		docman->documents = NULL;
 	}
+
+	if (docman->priv->tooltips) {
+		g_object_unref (docman->priv->tooltips);
+		docman->priv->tooltips = NULL;
+	}
 }
 
 static void
@@ -552,11 +564,17 @@ scaffold_notebook_document_manager_insta
 			  "activate",
 			  G_CALLBACK (docman_recent_files),
 			  dm);
+
+	dm->priv->tooltips = gtk_tooltips_new ();
+	g_object_ref (G_OBJECT (dm->priv->tooltips));
+	gtk_object_sink (GTK_OBJECT (dm->priv->tooltips));
 }
 
 static void
-docman_switch_notebookpage(GtkWidget* widget, GtkNotebookPage* page,
-			   gint page_num, gpointer data)
+docman_switch_notebookpage (GtkWidget *widget,
+			    GtkNotebookPage *page,
+			    gint page_num,
+			    gpointer data)
 {
         ScaffoldDocument *document;
 	ScaffoldNotebookDocumentManager *docman;
@@ -571,7 +589,7 @@ docman_switch_notebookpage(GtkWidget* wi
 		(SCAFFOLD_DOCUMENT_MANAGER (docman), page_num);
 	
 	if (!document) {
-		g_warning ("Couldn't find document\n");
+		g_warning ("Couldn't find document");
 		return;
 	}
 	
@@ -594,44 +612,77 @@ docman_recent_files (GdlRecent *recent,
 	docman = SCAFFOLD_NOTEBOOK_DOCUMENT_MANAGER (data);
 
 	scaffold_document_manager_open (SCAFFOLD_DOCUMENT_MANAGER (docman), 
-				      uri, 
-				      NULL);
+					uri, NULL);
 }
 
 static void
 docman_doc_modified (GtkWidget *widget, gpointer data)
 {
 	ScaffoldNotebookDocumentManager *docman;
+	ScaffoldDocument *document;
+	GtkWidget *label;
+	const gchar *filename;
+	gchar *new_name;
 
 	g_return_if_fail (data != NULL);
 	g_return_if_fail (SCAFFOLD_IS_DOCUMENT_MANAGER (data));
 
 	docman = SCAFFOLD_NOTEBOOK_DOCUMENT_MANAGER (data);
+	document = docman->current_document;
 
+	/* Update commands. */
 	bonobo_ui_component_set_prop (docman->ui_component,
 				      "/commands/FileSave",
 				      "sensitive", "1", NULL);
 	bonobo_ui_component_set_prop (docman->ui_component, 
 				      "/commands/FileRevert",
 				      "sensitive", "1", NULL);
+
+	/* Update label. */
+	label = g_object_get_data (G_OBJECT (document), 
+				   "ScaffoldNotebookDocumentManager::label");
+	filename = gtk_label_get_label (GTK_LABEL (label));
+
+	new_name = g_strdup_printf ("%s*", filename);
+	gtk_label_set_label (GTK_LABEL (label), new_name);
+	g_free (new_name);
 }
 
 static void
 docman_doc_unmodified (GtkWidget *widget, gpointer data)
 {
 	ScaffoldNotebookDocumentManager *docman;
+	ScaffoldDocument *document;
+	GtkWidget *label;
+	const gchar *filename;
+	gchar *new_name;
+	int length;
 
 	g_return_if_fail (data != NULL);
 	g_return_if_fail (SCAFFOLD_IS_DOCUMENT_MANAGER (data));
 
 	docman = SCAFFOLD_NOTEBOOK_DOCUMENT_MANAGER (data);
+	document = docman->current_document;
 
+	/* Update commands. */
 	bonobo_ui_component_set_prop (docman->ui_component,
 				      "/commands/FileSave",
 				      "sensitive", "0", NULL);
 	bonobo_ui_component_set_prop (docman->ui_component, 
 				      "/commands/FileRevert",
 				      "sensitive", "0", NULL);
+
+	/* Update label. */
+	label = g_object_get_data (G_OBJECT (document), 
+				   "ScaffoldNotebookDocumentManager::label");
+	filename = gtk_label_get_label (GTK_LABEL (label));
+
+	length = strlen (filename);
+	if (length > 1 && filename[length - 1] == '*') {
+		new_name = g_strndup (filename, length - 1);
+		gtk_label_set_label (GTK_LABEL (label), new_name);
+		g_free (new_name);
+	}
 }
 
 static void
@@ -1003,7 +1054,7 @@ scaffold_notebook_document_manager_open 
 	if (!gnome_vfs_uri_exists (uri)) {
 		char *msg;
 		msg = g_strdup_printf (_("Could not find file '%s'"), string_uri);
-		g_warning (msg);
+		g_warning ("Could not find file '%s'", string_uri);
 		scaffold_dialog_error (msg);
 		g_free (msg);
 		gnome_vfs_uri_unref (uri);
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.