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);