Re: [evolution-patches] [Fwd: [Evolution-hackers] Make attachment properties instant apply + HIGgy]



Am Mi, den 02.06.2004, 11:11 Uhr -0400 schrieb Jeffrey Stedfast:
> On Wed, 2004-06-02 at 09:32, Christian Neumair wrote:
> > -------- Weitergeleitete Nachricht --------
> > > Von: Christian Neumair <chris gnome-de org>
> > > An: evolution-hackers lists ximian com
> > > Betreff: [Evolution-hackers] Make attachment properties instant apply
> > > + HIGgy
> > > Datum: Wed, 02 Jun 2004 14:31:57 +0200
> > > The attached patch makes the attachment property dialog instant apply
> > > and is a first shot at making it HIG compliant. The MIME entry has been
> > > replaced by a label because it isn't editable at the moment and most
> > > probably we won't get a nice MIME type picker for the next few months.
> > 
> > Sorry, wrong list.
> > 
> > ______________________________________________________________________
> > Index: composer/e-msg-composer-attachment.c
> > ===================================================================
> > RCS file: /cvs/gnome/evolution/composer/e-msg-composer-attachment.c,v
> > retrieving revision 1.52
> > diff -u -r1.52 e-msg-composer-attachment.c
> > --- composer/e-msg-composer-attachment.c	31 Mar 2004 10:08:03 -0000	1.52
> > +++ composer/e-msg-composer-attachment.c	2 Jun 2004 12:30:03 -0000
> > @@ -33,6 +33,7 @@
> >  #include <errno.h>
> >  
> >  #include <camel/camel.h>
> > +#include <gtk/gtklabel.h>
> >  #include <gtk/gtknotebook.h>
> >  #include <gtk/gtktogglebutton.h>
> >  #include <gtk/gtkdialog.h>
> > @@ -284,8 +285,8 @@
> >  	GtkWidget *dialog;
> >  	GtkEntry *file_name_entry;
> >  	GtkEntry *description_entry;
> > -	GtkEntry *mime_type_entry;
> > -	GtkToggleButton *disposition_checkbox;
> > +	GtkLabel *mime_type_label;
> > +	GtkToggleButton *disposition_toggle_button;
> >  	EMsgComposerAttachment *attachment;
> 
> ugh. don't the change the name of the disposition_checkbox for no
> reason.
> 
> and PLEASE keep mime_type_entry as a GtkEntry.

Currently you can't change it. Anyway, I did what you said.

> >  } DialogData;
> >  
> > @@ -302,15 +303,14 @@
> >   */
> >  
> >  static void
> > -set_entry (GladeXML *xml, const char *widget_name, const char *value)
> > +set_widget_value (GtkWidget *widget, const char *value)
> >  {
> > -	GtkEntry *entry;
> > -	
> > -	entry = GTK_ENTRY (glade_xml_get_widget (xml, widget_name));
> > -	if (entry == NULL)
> > -		g_warning ("Entry for `%s' not found.", widget_name);
> > -	else
> > -		gtk_entry_set_text (entry, value ? value : "");
> > +	g_return_if_fail (widget != NULL);
> > +
> > +	if (GTK_IS_ENTRY (widget))
> > +		gtk_entry_set_text (GTK_ENTRY (widget), value ? value : "");
> > +	else if (GTK_IS_LABEL (widget))
> > +		gtk_label_set_text (GTK_LABEL (widget), value ? value : "");
> 
> this change won't be needed anymore since mime_type_entry must stay an
> entry widget.
> 
> anyways, a lot of other stuff doesn't need to change either.

Well, I considered it idiotic to query glade if you already fetched the
widgets. It's your decision, though.
Minimalistic patch attached.

regs,
 Chris
Index: composer/e-msg-composer-attachment.c
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer-attachment.c,v
retrieving revision 1.52
diff -u -r1.52 e-msg-composer-attachment.c
--- composer/e-msg-composer-attachment.c	31 Mar 2004 10:08:03 -0000	1.52
+++ composer/e-msg-composer-attachment.c	3 Jun 2004 10:40:39 -0000
@@ -342,49 +342,55 @@
 }
 
 static void
-ok_cb (GtkWidget *widget, gpointer data)
+response_cb (GtkWidget *widget, gint response, gpointer data)
+{
+	close_cb (widget, data);
+}
+
+static void
+file_name_entry_changed_cb (GtkEntry *entry, gpointer data)
 {
-	DialogData *dialog_data;
 	EMsgComposerAttachment *attachment;
 	const char *str;
-	
-	dialog_data = (DialogData *) data;
-	attachment = dialog_data->attachment;
-	
-	str = gtk_entry_get_text (dialog_data->file_name_entry);
+
+	attachment = (EMsgComposerAttachment *) data;
+
+	str = gtk_entry_get_text (entry);
 	camel_mime_part_set_filename (attachment->body, str);
-	
-	str = gtk_entry_get_text (dialog_data->description_entry);
+
+	changed (attachment);
+}
+
+static void
+description_entry_changed_cb (GtkEntry *entry, gpointer data)
+{
+	EMsgComposerAttachment *attachment;
+	const char *str;
+
+	attachment = (EMsgComposerAttachment *) data;
+
+	str = gtk_entry_get_text (entry);
 	camel_mime_part_set_description (attachment->body, str);
-	
-	str = gtk_entry_get_text (dialog_data->mime_type_entry);
-	camel_mime_part_set_content_type (attachment->body, str);
-	
-	camel_data_wrapper_set_mime_type(camel_medium_get_content_object(CAMEL_MEDIUM (attachment->body)), str);
-	
-	switch (gtk_toggle_button_get_active (dialog_data->disposition_checkbox)) {
-	case 0:
-		camel_mime_part_set_disposition (attachment->body, "attachment");
-		break;
-	case 1:
-		camel_mime_part_set_disposition (attachment->body, "inline");
-		break;
-	default:
-		/* Hmmmm? */
-		break;
-	}
-	
+
 	changed (attachment);
-	close_cb (widget, data);
 }
 
 static void
-response_cb (GtkWidget *widget, gint response, gpointer data)
+disposition_checkbox_toggled_cb (GtkToggleButton *button, gpointer data)
 {
-	if (response == GTK_RESPONSE_OK)
-		ok_cb (widget, data);
+	EMsgComposerAttachment *attachment;
+	gboolean active = FALSE;
+
+	attachment = (EMsgComposerAttachment *) data;
+
+	active = gtk_toggle_button_get_active (button);
+
+	if (active)
+		camel_mime_part_set_disposition (attachment->body, "inline");
 	else
-		close_cb (widget, data);
+		camel_mime_part_set_disposition (attachment->body, "attachment");
+
+	changed (attachment);
 }
 
 void
@@ -395,7 +401,7 @@
 	DialogData *dialog_data;
 	GladeXML *editor_gui;
 	char *type;
-	
+
 	g_return_if_fail (attachment != NULL);
 	g_return_if_fail (E_IS_MSG_COMPOSER_ATTACHMENT (attachment));
 	
@@ -443,10 +449,18 @@
 	set_entry (editor_gui, "mime_type_entry", type);
 	g_free (type);
 	
+	g_signal_connect (dialog_data->file_name_entry, "changed",
+			  G_CALLBACK (file_name_entry_changed_cb), attachment);
+	g_signal_connect (dialog_data->description_entry, "changed",
+			  G_CALLBACK (description_entry_changed_cb), attachment);
+
 	disposition = camel_mime_part_get_disposition (attachment->body);
 	gtk_toggle_button_set_active (dialog_data->disposition_checkbox,
 				      disposition && !g_ascii_strcasecmp (disposition, "inline"));
 	
+	g_signal_connect (dialog_data->disposition_checkbox, "toggled",
+			  G_CALLBACK (disposition_checkbox_toggled_cb), attachment);
+
 	connect_widget (editor_gui, "dialog", "response", (GCallback)response_cb, dialog_data);
 #warning "signal connect while alive"	
 	/* make sure that when the composer gets hidden/closed that our windows also close */
Index: composer/e-msg-composer-attachment.glade
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer-attachment.glade,v
retrieving revision 1.10
diff -u -r1.10 e-msg-composer-attachment.glade
--- composer/e-msg-composer-attachment.glade	21 Apr 2003 17:45:52 -0000	1.10
+++ composer/e-msg-composer-attachment.glade	3 Jun 2004 10:40:39 -0000
@@ -4,49 +4,36 @@
 <glade-interface>
 
 <widget class="GtkDialog" id="dialog">
-  <property name="border_width">6</property>
+  <property name="border_width">5</property>
   <property name="visible">True</property>
   <property name="title" translatable="yes">Attachment Properties</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_NONE</property>
   <property name="modal">False</property>
   <property name="resizable">True</property>
-  <property name="destroy_with_parent">False</property>
-  <property name="has_separator">True</property>
+  <property name="destroy_with_parent">True</property>
+  <property name="has_separator">False</property>
 
   <child internal-child="vbox">
-    <widget class="GtkVBox" id="dialog-vbox1">
+    <widget class="GtkVBox" id="vbox">
       <property name="visible">True</property>
       <property name="homogeneous">False</property>
-      <property name="spacing">6</property>
+      <property name="spacing">14</property>
 
       <child internal-child="action_area">
-	<widget class="GtkHButtonBox" id="dialog-action_area1">
+	<widget class="GtkHButtonBox" id="hbbox">
 	  <property name="visible">True</property>
 	  <property name="layout_style">GTK_BUTTONBOX_END</property>
 
 	  <child>
-	    <widget class="GtkButton" id="close_button">
+	    <widget class="GtkButton" id="button">
 	      <property name="visible">True</property>
 	      <property name="can_default">True</property>
-	      <property name="has_default">True</property>
 	      <property name="can_focus">True</property>
-	      <property name="label">gtk-cancel</property>
+	      <property name="label">gtk-close</property>
 	      <property name="use_stock">True</property>
 	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      <property name="response_id">-6</property>
-	    </widget>
-	  </child>
-
-	  <child>
-	    <widget class="GtkButton" id="ok_button">
-	      <property name="visible">True</property>
-	      <property name="can_default">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="label">gtk-ok</property>
-	      <property name="use_stock">True</property>
-	      <property name="relief">GTK_RELIEF_NORMAL</property>
-	      <property name="response_id">-5</property>
+	      <property name="response_id">-7</property>
 	    </widget>
 	  </child>
 	</widget>
@@ -59,134 +46,138 @@
       </child>
 
       <child>
-	<widget class="GtkTable" id="table1">
+	<widget class="GtkTable" id="table">
+	  <property name="border_width">5</property>
 	  <property name="visible">True</property>
 	  <property name="n_rows">4</property>
 	  <property name="n_columns">2</property>
 	  <property name="homogeneous">False</property>
 	  <property name="row_spacing">6</property>
-	  <property name="column_spacing">6</property>
+	  <property name="column_spacing">12</property>
 
 	  <child>
-	    <widget class="GtkEntry" id="description_entry">
+	    <widget class="GtkLabel" id="label">
 	      <property name="visible">True</property>
-	      <property name="can_focus">True</property>
-	      <property name="editable">True</property>
-	      <property name="visibility">True</property>
-	      <property name="max_length">0</property>
-	      <property name="text" translatable="yes"></property>
-	      <property name="has_frame">True</property>
-	      <property name="invisible_char" translatable="yes">*</property>
-	      <property name="activates_default">False</property>
+	      <property name="label" translatable="yes">_Filename:</property>
+	      <property name="use_underline">True</property>
+	      <property name="use_markup">False</property>
+	      <property name="justify">GTK_JUSTIFY_CENTER</property>
+	      <property name="wrap">False</property>
+	      <property name="selectable">False</property>
+	      <property name="xalign">0</property>
+	      <property name="yalign">0.5</property>
+	      <property name="xpad">0</property>
+	      <property name="ypad">0</property>
+	      <property name="mnemonic_widget">file_name_entry</property>
 	    </widget>
 	    <packing>
-	      <property name="left_attach">1</property>
-	      <property name="right_attach">2</property>
-	      <property name="top_attach">1</property>
-	      <property name="bottom_attach">2</property>
+	      <property name="left_attach">0</property>
+	      <property name="right_attach">1</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
+	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkEntry" id="mime_type_entry">
+	    <widget class="GtkEntry" id="file_name_entry">
 	      <property name="visible">True</property>
-	      <property name="sensitive">False</property>
 	      <property name="can_focus">True</property>
-	      <property name="editable">False</property>
+	      <property name="editable">True</property>
 	      <property name="visibility">True</property>
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
 	      <property name="has_frame">True</property>
 	      <property name="invisible_char" translatable="yes">*</property>
-	      <property name="activates_default">False</property>
+	      <property name="activates_default">True</property>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">2</property>
-	      <property name="bottom_attach">3</property>
+	      <property name="top_attach">0</property>
+	      <property name="bottom_attach">1</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="mime_label">
+	    <widget class="GtkLabel" id="label">
 	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">MIME type:</property>
-	      <property name="use_underline">False</property>
+	      <property name="label" translatable="yes">_Description:</property>
+	      <property name="use_underline">True</property>
 	      <property name="use_markup">False</property>
-	      <property name="justify">GTK_JUSTIFY_LEFT</property>
+	      <property name="justify">GTK_JUSTIFY_CENTER</property>
 	      <property name="wrap">False</property>
 	      <property name="selectable">False</property>
-	      <property name="xalign">1</property>
+	      <property name="xalign">0</property>
 	      <property name="yalign">0.5</property>
 	      <property name="xpad">0</property>
 	      <property name="ypad">0</property>
+	      <property name="mnemonic_widget">description_entry</property>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">1</property>
-	      <property name="top_attach">2</property>
-	      <property name="bottom_attach">3</property>
+	      <property name="top_attach">1</property>
+	      <property name="bottom_attach">2</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="description_label">
+	    <widget class="GtkEntry" id="description_entry">
 	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">Description:</property>
-	      <property name="use_underline">False</property>
-	      <property name="use_markup">False</property>
-	      <property name="justify">GTK_JUSTIFY_CENTER</property>
-	      <property name="wrap">False</property>
-	      <property name="selectable">False</property>
-	      <property name="xalign">1</property>
-	      <property name="yalign">0.5</property>
-	      <property name="xpad">0</property>
-	      <property name="ypad">0</property>
+	      <property name="can_focus">True</property>
+	      <property name="editable">True</property>
+	      <property name="visibility">True</property>
+	      <property name="max_length">0</property>
+	      <property name="text" translatable="yes"></property>
+	      <property name="has_frame">True</property>
+	      <property name="invisible_char" translatable="yes">*</property>
+	      <property name="activates_default">True</property>
 	    </widget>
 	    <packing>
-	      <property name="left_attach">0</property>
-	      <property name="right_attach">1</property>
+	      <property name="left_attach">1</property>
+	      <property name="right_attach">2</property>
 	      <property name="top_attach">1</property>
 	      <property name="bottom_attach">2</property>
-	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkLabel" id="filename_label">
+	    <widget class="GtkLabel" id="label">
 	      <property name="visible">True</property>
-	      <property name="label" translatable="yes">File name:</property>
-	      <property name="use_underline">False</property>
+	      <property name="label" translatable="yes">_MIME type:</property>
+	      <property name="use_underline">True</property>
 	      <property name="use_markup">False</property>
-	      <property name="justify">GTK_JUSTIFY_CENTER</property>
+	      <property name="justify">GTK_JUSTIFY_LEFT</property>
 	      <property name="wrap">False</property>
 	      <property name="selectable">False</property>
-	      <property name="xalign">1</property>
+	      <property name="xalign">0</property>
 	      <property name="yalign">0.5</property>
 	      <property name="xpad">0</property>
 	      <property name="ypad">0</property>
+	      <property name="mnemonic_widget">mime_type_entry</property>
 	    </widget>
 	    <packing>
 	      <property name="left_attach">0</property>
 	      <property name="right_attach">1</property>
-	      <property name="top_attach">0</property>
-	      <property name="bottom_attach">1</property>
+	      <property name="top_attach">2</property>
+	      <property name="bottom_attach">3</property>
 	      <property name="x_options">fill</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
 
 	  <child>
-	    <widget class="GtkEntry" id="file_name_entry">
+	    <widget class="GtkEntry" id="mime_type_entry">
 	      <property name="visible">True</property>
+	      <property name="sensitive">False</property>
 	      <property name="can_focus">True</property>
-	      <property name="editable">True</property>
+	      <property name="editable">False</property>
 	      <property name="visibility">True</property>
 	      <property name="max_length">0</property>
 	      <property name="text" translatable="yes"></property>
@@ -197,8 +188,8 @@
 	    <packing>
 	      <property name="left_attach">1</property>
 	      <property name="right_attach">2</property>
-	      <property name="top_attach">0</property>
-	      <property name="bottom_attach">1</property>
+	      <property name="top_attach">2</property>
+	      <property name="bottom_attach">3</property>
 	      <property name="y_options"></property>
 	    </packing>
 	  </child>
@@ -207,7 +198,7 @@
 	    <widget class="GtkCheckButton" id="disposition_checkbox">
 	      <property name="visible">True</property>
 	      <property name="can_focus">True</property>
-	      <property name="label" translatable="yes">Suggest automatic display of attachment</property>
+	      <property name="label" translatable="yes">Suggest _automatic display of attachment</property>
 	      <property name="use_underline">True</property>
 	      <property name="relief">GTK_RELIEF_NORMAL</property>
 	      <property name="active">False</property>
Index: composer/e-msg-composer-select-file.c
===================================================================
RCS file: /cvs/gnome/evolution/composer/e-msg-composer-select-file.c,v
retrieving revision 1.27
diff -u -r1.27 e-msg-composer-select-file.c
--- composer/e-msg-composer-select-file.c	19 Apr 2004 15:20:26 -0000	1.27
+++ composer/e-msg-composer-select-file.c	3 Jun 2004 10:40:39 -0000
@@ -71,7 +71,7 @@
 	}
 
 	if (showinline_p) {
-		showinline = gtk_check_button_new_with_label (_("Suggest automatic display of attachment"));
+		showinline = gtk_check_button_new_with_mnemonic (_("Suggest _automatic display of attachment"));
 		gtk_widget_show (showinline);
 		gtk_box_pack_end (GTK_BOX (selection->main_vbox), showinline, FALSE, FALSE, 4);
 	}


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