Re: [PATCH] Scaffold -- Added tooltips and file modified flag into document-manager
Rui Lopes <[email protected]>
| Newsgroups | gmane.comp.gnome.devtools |
|---|---|
| Message-ID | <1062675118.607.4.camel@localhost> |
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
document_manager_tab_tooltips_and_mod_flag.patch
(text/x-patch, 7.6 KB)
Index: ChangeLog =================================================================== RCS file: /cvs/gnome/scaffold/ChangeLog,v retrieving revision 1.273 diff -u -r1.273 ChangeLog --- ChangeLog 25 Aug 2003 16:49:46 -0000 1.273 +++ ChangeLog 4 Sep 2003 11:19:06 -0000 @@ -1,3 +1,17 @@ +2003-09-04 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-08-25 Danilo Šegan <[email protected]> * configure.in: Added "sr" and "sr@Latn" to ALL_LINGUAS. 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 -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 4 Sep 2003 11:19:07 -0000 @@ -61,6 +61,8 @@ GHashTable *verbs; GConfClient *client; + + GtkTooltips *tooltips; }; typedef struct { @@ -86,6 +88,8 @@ const char *uri, gpointer data); static void docman_doc_destroy (GtkWidget *widget, gpointer data); +static void document_modified (GtkWidget *widget, gpointer data); +static void document_unmodified (GtkWidget *widget, gpointer data); static void set_current_document (ScaffoldNotebookDocumentManager *docman, ScaffoldDocument *doc); static void load_new_menu (ScaffoldNotebookDocumentManager *docman); @@ -101,7 +105,7 @@ ScaffoldNotebookDocumentManager *dm; dm = g_object_new (SCAFFOLD_TYPE_NOTEBOOK_DOCUMENT_MANAGER, NULL); - + dm->ui_container = ui_container; dm->ui_component = ui_component; @@ -141,6 +145,7 @@ { gchar *basename; GdkPixbuf *pixbuf; + GtkWidget *tooltip; GtkWidget *label; GtkWidget *icon; @@ -154,6 +159,10 @@ gtk_label_set_text (GTK_LABEL (label), basename); g_free (basename); + tooltip = g_object_get_data (G_OBJECT (document), + "ScaffoldNotebookDocumentManager::tooltip"); /* XXX: Another name for this? */ + 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"); @@ -177,6 +186,7 @@ docman->priv->untitled_count--; } + /* TODO: disconnect our document_(un)modified from document here? */ g_signal_emit_by_name (docman, "document_removed", document); docman->documents = @@ -269,6 +279,7 @@ static void add_doc (ScaffoldNotebookDocumentManager *docman, ScaffoldDocument *document) { + GtkWidget *event_box; GtkWidget *tab_hbox; GtkWidget *label; GtkWidget *button; @@ -289,7 +300,7 @@ 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; } @@ -318,7 +329,14 @@ 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", /* XXX: Another name for this? */ + 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 (); @@ -335,12 +353,14 @@ 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 */ + /* XXX: Why connect'ing to "(un)modifed" signals here? if we are (de)connecting on set_current_document? */ g_signal_connect (document, "modified", G_CALLBACK (docman_doc_modified), docman); @@ -350,7 +370,14 @@ g_signal_connect (document, "uri_changed", G_CALLBACK (docman_doc_uri_changed), docman); - + + /* Make necessary document connections for changing tab appearance when the file is (un)modified. */ + g_signal_connect (document, "modified", + G_CALLBACK (document_modified), + document); + g_signal_connect (document, "unmodified", + G_CALLBACK (document_unmodified), + document); g_signal_connect (G_OBJECT(document), "destroy", G_CALLBACK (docman_doc_destroy), @@ -410,6 +437,11 @@ g_list_free (docman->documents); docman->documents = NULL; } + + if (docman->priv->tooltips) { + g_object_unref (docman->priv->tooltips); + docman->priv->tooltips = NULL; /* XXX: Why is this needed? */ + } } static void @@ -552,6 +584,10 @@ "activate", G_CALLBACK (docman_recent_files), dm); + + dm->priv->tooltips = gtk_tooltips_new (); + g_object_ref (G_OBJECT (dm->priv->tooltips)); /* XXX: maybe just add the tooltips widget to the notebook? */ + gtk_object_sink (GTK_OBJECT (dm->priv->tooltips)); /* don't forget to remove the unref from docman_dispose! */ } static void @@ -693,6 +729,50 @@ } static void +document_modified (GtkWidget *widget, gpointer data) +{ + ScaffoldDocument *document; + GtkWidget *label; + const gchar *str; + const gchar *new_str; + + g_assert (SCAFFOLD_IS_DOCUMENT (data)); + + document = SCAFFOLD_DOCUMENT (data); + label = g_object_get_data (G_OBJECT (document), + "ScaffoldNotebookDocumentManager::label"); + str = gtk_label_get_label (GTK_LABEL (label)); + + new_str = g_strdup_printf ("%s*", str); + gtk_label_set_label (GTK_LABEL (label), new_str); + g_free ((void*) new_str); +} + +static void +document_unmodified (GtkWidget *widget, gpointer data) +{ + ScaffoldDocument *document; + GtkWidget *label; + const gchar *str; + const gchar *new_str; + int length; + + g_assert (SCAFFOLD_IS_DOCUMENT (data)); + + document = SCAFFOLD_DOCUMENT (data); + label = g_object_get_data (G_OBJECT (document), + "ScaffoldNotebookDocumentManager::label"); + str = gtk_label_get_label (GTK_LABEL (label)); + + length = strlen (str); + if (length > 1 && str[length-1] == '*') { + new_str = g_strndup (str, length-1); + gtk_label_set_label (GTK_LABEL (label), new_str); + g_free ((void*) new_str); + } +} + +static void set_current_document (ScaffoldNotebookDocumentManager *docman, ScaffoldDocument *doc) { @@ -955,7 +1035,7 @@ "document-preferences", NULL); if (!gui) { - g_warning ("Could not load scaffold-document-manager.glade, reinstall scaffold"); + g_warning ("Could not load scaffold-document-manager.glade, reinstall scaffold\n"); return NULL; } @@ -1003,7 +1083,7 @@ 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'\n", string_uri); scaffold_dialog_error (msg); g_free (msg); gnome_vfs_uri_unref (uri);